如何用item pipeline(管道)清洗資料

2022-07-30 06:09:08 字數 2766 閱讀 4229

如何實現item pipeline

乙個item pipeline不需要繼承特定基類,只需要實現某些特定方法,如process_item、open_spider、close_spider等。

process_item(item , spider):

每個 item pipeline 元件都需要呼叫該方法,這個方法必須返回乙個 item (或任何繼承類)物件, 或是丟擲 dropitem 異常,被丟棄的 item 將不會被之後的 pipeline 元件所處理

需要傳入的引數為:

item (item 物件) : 被爬取的 item

spider (spider 物件) : 爬取該 item 的 spider

該方法會被每乙個 item pipeline 元件所呼叫,process_item 必須返回以下其中的任意乙個物件:

乙個 dict

乙個 item 物件或者它的子類物件

乙個 twisted deferred 物件

乙個 dropitem exception;如果返回此異常,則該 item 將不會被後續的 item pipeline 所繼續訪問

注意:該方法是item pipeline必須實現的方法,其它三個方法(open_spider/close_spider/from_crawler)是可選的方法

如果process_item返回了一項資料(item或字典),返回的資料會傳遞給下一級item pipeline繼續處理,如果沒有則結束處理。

另外,當process_item在處理某項item時丟擲dropitem異常,該項item便會被拋棄,不再傳遞給後面的item pipeline處理,也不會匯出到檔案。

open_spider(self , spider ):——爬蟲啟動時呼叫

spider開啟時,即處理資料前,會**該方法。該方法通常用於在開始處理資料前完成一些初始化工作,比如連線資料庫。

close_spider(self , spider):——爬蟲關閉時呼叫

與open_spider相對,為spider關閉時,即處理資料後,會**該方法。該方法通常用於在處理完所有資料之後完成某些清理工作,比如關閉資料庫。

from_crawler(cls, crawler):——也是在爬蟲啟動時呼叫,但是比open_spider早

建立item pipeline物件時**該類方法。該類方法用來從 crawler 中初始化得到乙個 pipeline 例項;它必須返回乙個新的 pipeline 例項;crawler 物件提供了訪問所有 scrapy 核心元件的介面,包括 settings 和 signals

**實現

新建bookpipelines.py檔案

from scrapy.exceptions import dropitem

from scrapy.item import item

import pymongo

#實現**轉換——第乙個item pipeline,執行順序較次

class pricepipeline(object):

exchange_rate = 8.5309

def process_item(self , item , spider):

price = float(item['price'][1:]) * self.exchange_rate

item['price'] = '¥ %.2f' % price

return item

# 實現去除重複書名的資料——第二個item pipeline,執行順序最優

class duplicatespipeline(object):

def __init__(self):

self.book_set = set()

def process_item(self , item , spider):

name = item['name']

if name in self.book_set:

raise dropitem("duplicate book found: %s" % item)

self.book_set.add(name)

return item

#實現將資料存入mongodb中——第三個item pipeline,執行順序最後

class mongodbpipeline(object):

def from_crawler(cls , crawler):

cls.db_uri = crawler.settings.get('mongo_db_uri' , 'mongodb://localhost:27017/')

cls.db_name = crawler.settings.get('mongo_db_name' , 'scrapy_datas')

return cls()

def open_spider(self , spider):

self.client = pymongo.mongoclient(self.db_uri)

self.db = self.client[self.db_name]

def close_spider(self , spider):

self.client.close()

def process_item(self , item , spider):

collection = self.db[spider.name]

post = dict(item) if isinstance(item , item) else item

collection.insert_one(post)

return item

如何用軟文推廣

如何用軟文推廣呢?2 作為 魚餌 讓客戶通過付出一些行動,比如幫忙推廣10個ip,或者通過加qq,留下郵箱 手機號等方式,獲得大量的精準潛在客戶資料庫,最大化軟文的效率。高質量軟文製作技巧 寫作軟文前,一定要做好規劃,明確軟文推廣要達到的目的,了解消費者的對產品的各種問題和顧慮,針對性的提出解決方案...

如何用gitbook寫書

生成一本小書,它有前言,章節1,章節2,後記。例如 簡介 第一章 如何造火箭 1.燃料學 2.空氣動力學 3.工程學 第二章 如何 火箭 1.自動控制原理 2.二次利用要點 結束建乙個寫書的目錄,以後所有工作都在這個目錄下搞。例如 users raywill gitbook first在電腦上建立整...

如何用好Google?

如何提高自己的搜尋技術?男性凱格爾運動 掌握搜尋邏輯和搜尋思路。願意為優質的付費是高效的解決問題思路。盡量少使用搜尋引擎 針對不同的問題使用不同的資料庫。搜尋心法 找什麼 找 怎麼找。搜尋技巧 遇到問題 第一件事就是搜尋 搜尋。搜尋也是可以轉變思維方式 書友沙龍 可直接看轉化為 樊登讀書會 舉辦的讀...