process_item(self,item,spider)
:
open_spider(self, spider)
: 在爬蟲開啟的時候僅執行一次
close_spider(self, spider)
: 在爬蟲關閉的時候僅執行一次
易錯點:這裡需要返回item
,而且是在if外,當該管道在
setting
檔案中排第乙個時,需要將item
原封不動的返回,
from itemadapter import itemadapter
import json
from pymongo import mongoclient
# 第乙個管道,給jnu爬蟲用的,所以需要if spider.name == 'jnu':來區分
class
jnuteacherspipeline
:def
open_spider
(self, spider)
:if spider.name ==
'jnu'
: self.f =
open
('jnu.json'
,'w'
)def
process_item
(self, item, spider)
:if spider.name ==
'jnu'
:# 先將item轉化為字典型
data=
dict
(item)
# 將字典轉化為json格式
json_data = json.dumps(data)
# 儲存
self.f.write(json_data +
'\n'
)# 易錯點:這裡需要返回item,而且是在if外,
#當該管道在setting檔案中排第乙個時,需要將item原封不動的返回,
#否則下乙個管道收到的item會出問題
return item
defclose_spider
(self, spider)
:if spider.name ==
'jnu'
: self.f.close(
)# 第二個管道,給jnu_plus爬蟲用的,所以需要if spider.name == 'jnu_plus':來區分
class
jnuplusteacherpipeline
:def
open_spider
(self, spider)
:if spider.name ==
'jnu_plus'
: self.f =
open
('jnu_plus.json'
,'w'
)def
process_item
(self,item, spider)
:if spider.name ==
'jnu_plus'
: data =
dict
(item)
self.f.write(json.dumps(data)
+'\n'
)return item
defclose_spider
(self, spider)
:if spider.name ==
'jnu_plus'
: self.f.close(
)class
mongopipeline
:# 對mongo資料庫的連線,建立jnu的庫和jnuteacher的文件
defopen_spider
(self, spider)
: self.client = mongoclient(
) self.dbs = self.client[
'jnu'
] self.collections = self.dbs[
'jnuteacher'
]def
process_item
(self, item, spider)
:#需要將資料轉化為字典型,才能插入mongo資料庫中
data =
dict
(item)
self.collections.insert(data)
return item
defclose_spider
(self, spider)
: self.client.close(
)
權重越小,優先順序越高
item_pipelines =
不同的pipeline
可以處理不同爬蟲的資料,通過spider.name
屬性來區分
不同的pipeline
能夠對乙個或多個爬蟲進行不同的資料處理的操作,比如乙個進行資料清洗,乙個進行資料的儲存
同乙個管道類也可以處理不同爬蟲的資料,通過spider.name
屬性來區分
使用之前需要在settings
中開啟
pipeline
在setting
中鍵表示位置(即pipeline
在專案中的位置可以自定義),值表示距離引擎的遠近,越近資料會越先經過:權重值小的優先執行
有多個pipeline
的時候,process_item
的方法必須return item
,否則後乙個pipeline
取到的資料為none
值
pipeline
中process_item
的方法必須有,否則item
沒有辦法接受和處理
process_item
方法接受item
和spider
,其中spider
表示當前傳遞item
過來的spider
open_spider(spider)
:能夠在爬蟲開啟的時候執行一次
close_spider(spider)
:能夠在爬蟲關閉的時候執行一次
上述倆個方法經常用於爬蟲和資料庫的互動,在爬蟲開啟的時候建立和資料庫的連線,在爬蟲關閉的時候斷開和資料庫的連線
黑馬python2 7的爬蟲4 Scrapy框架
期末考試了,出差,不曉得有沒有時間寫哦,先開個頭 注意,python2.x預設編碼環境是ascii,當和取回的資料編碼格式不一致時,可能會造成亂碼 我們可以指定儲存內容的編碼格式,一般情況下,我們可以在 最上方新增 import sys reload sys sys.setdefaultencodi...
爬蟲系列4 scrapy技術高階之多頁面爬取
多頁面爬取有兩種形式。1 從某乙個或者多個主頁中獲取多個子頁面的url列表,parse 函式依次爬取列表中的各個子頁面。2 從遞迴爬取,這個相對簡單。在scrapy中只要定義好初始頁面以及爬蟲規則rules,就能夠實現自動化的遞迴爬取。獲取子頁面url列表的 示例如下 先獲取url list,然後根...
scrapy框架基於管道的持久化儲存
全棧資料的爬取 如何傳送post請求 yield scrapy.fromrequest url new url,callback self.parse,formdata 五大核心元件 物件 如何適當提公升scrapy爬取資料的效率 增加併發 預設scrapy開啟的併發執行緒為16個,可以適當進行增加...