4 scrapy的管道pipelines使用詳解

2021-10-07 23:50:19 字數 3423 閱讀 5763

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中開啟

pipelinesetting中鍵表示位置(即pipeline在專案中的位置可以自定義),值表示距離引擎的遠近,越近資料會越先經過:權重值小的優先執行

有多個pipeline的時候,process_item的方法必須return item,否則後乙個pipeline取到的資料為none

pipelineprocess_item的方法必須有,否則item沒有辦法接受和處理

process_item方法接受itemspider,其中spider表示當前傳遞item過來的spideropen_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個,可以適當進行增加...