亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Scrapy爬蟲入門教程九

2019-11-06 06:05:23
字體:
來源:轉載
供稿:網友

簡單的Python版本管理:pyenv Scrapy爬蟲入門教程一 Scrapy爬蟲入門教程二 Scrapy爬蟲入門教程三 Scrapy爬蟲入門教程四 Scrapy爬蟲入門教程五 Scrapy爬蟲入門教程六 Scrapy爬蟲入門教程七 Scrapy爬蟲入門教程八

Item Pipeline項目管道編寫自己的項目管道項目管道示例價格驗證和丟棄項目沒有價格將項目寫入MongoDB拍攝項目的屏幕截圖復制過濾器激活項目管道組件

開發環境: Python 3.6.0 版本 (當前最新) Scrapy 1.3.2 版本 (當前最新)

Item Pipeline(項目管道)

在項目被蜘蛛抓取后,它被發送到項目管道,它通過順序執行的幾個組件來處理它。

每個項目管道組件(有時稱為“Item Pipeline”)是一個實現簡單方法的Python類。他們接收一個項目并對其執行操作,還決定該項目是否應該繼續通過流水線或被丟棄并且不再被處理。

項目管道的典型用途是:

清理HTML數據驗證抓取的數據(檢查項目是否包含特定字段)檢查重復(并刪除)將刮取的項目存儲在數據庫

編寫自己的項目管道

每個項目管道組件是一個Python類,必須實現以下方法: PRocess_item(self, item, spider)

對于每個項目管道組件調用此方法。process_item() 必須:返回一個帶數據的dict,返回一個Item (或任何后代類)對象,返回一個Twisted Deferred或者raise DropItemexception。丟棄的項目不再由其他管道組件處理。

參數:

item(Itemobject或dict) - 剪切的項目Spider(Spider對象) - 抓取物品的蜘蛛

另外,它們還可以實現以下方法:


open_spider(self, spider) 當蜘蛛打開時調用此方法。

參數:

蜘蛛(Spider對象) - 打開的蜘蛛

close_spider(self, spider) 當蜘蛛關閉時調用此方法。

參數:

蜘蛛(Spider對象) - 被關閉的蜘蛛

from_crawler(cls, crawler) 如果存在,則調用此類方法以從a創建流水線實例Crawler。它必須返回管道的新實例。Crawler對象提供對所有Scrapy核心組件(如設置和信號)的訪問; 它是管道訪問它們并將其功能掛鉤到Scrapy中的一種方式。

參數:

crawler(Crawlerobject) - 使用此管道的crawler

項目管道示例

價格驗證和丟棄項目沒有價格

讓我們來看看以下假設的管道,它調整 price那些不包括增值稅(price_excludes_vat屬性)的項目的屬性,并刪除那些不包含價格的項目:

from scrapy.exceptions import DropItemclass PricePipeline(object): vat_factor = 1.15 def process_item(self, item, spider): if item['price']: if item['price_excludes_vat']: item['price'] = item['price'] * self.vat_factor return item else: raise DropItem("Missing price in %s" % item)

將項目寫入JSON文件 以下管道將所有抓取的項目(來自所有蜘蛛)存儲到單個items.jl文件中,每行包含一個項目,以JSON格式序列化:

import jsonclass JsonWriterPipeline(object): def open_spider(self, spider): self.file = open('items.jl', 'wb') def close_spider(self, spider): self.file.close() def process_item(self, item, spider): line = json.dumps(dict(item)) + "/n" self.file.write(line) return item

注意

JsonWriterPipeline的目的只是介紹如何編寫項目管道。如果您真的想要將所有抓取的項目存儲到JSON文件中,則應使用Feed導出。


將項目寫入MongoDB

在這個例子中,我們使用pymongo將項目寫入MongoDB。MongoDB地址和數據庫名稱在Scrapy設置中指定; MongoDB集合以item類命名。

這個例子的要點是顯示如何使用from_crawler()方法和如何正確清理資源:

import pymongoclass MongoPipeline(object): collection_name = 'scrapy_items' def __init__(self, mongo_uri, mongo_db): self.mongo_uri = mongo_uri self.mongo_db = mongo_db @classmethod def from_crawler(cls, crawler): return cls( mongo_uri=crawler.settings.get('MONGO_URI'), mongo_db=crawler.settings.get('MONGO_DATABASE', 'items') ) def open_spider(self, spider): self.client = pymongo.MongoClient(self.mongo_uri) self.db = self.client[self.mongo_db] def close_spider(self, spider): self.client.close() def process_item(self, item, spider): self.db[self.collection_name].insert(dict(item)) return item

拍攝項目的屏幕截圖

此示例演示如何從方法返回Deferredprocess_item()。它使用Splash來呈現項目網址的屏幕截圖。Pipeline請求本地運行的Splash實例。在請求被下載并且Deferred回調觸發后,它將項目保存到一個文件并將文件名添加到項目。

import scrapyimport hashlibfrom urllib.parse import quoteclass ScreenshotPipeline(object): """Pipeline that uses Splash to render screenshot of every Scrapy item.""" SPLASH_URL = "http://localhost:8050/render.png?url={}" def process_item(self, item, spider): encoded_item_url = quote(item["url"]) screenshot_url = self.SPLASH_URL.format(encoded_item_url) request = scrapy.Request(screenshot_url) dfd = spider.crawler.engine.download(request, spider) dfd.addBoth(self.return_item, item) return dfd def return_item(self, response, item): if response.status != 200: # Error happened, return item. return item # Save screenshot to file, filename will be hash of url. url = item["url"] url_hash = hashlib.md5(url.encode("utf8")).hexdigest() filename = "{}.png".format(url_hash) with open(filename, "wb") as f: f.write(response.body) # Store filename in item. item["screenshot_filename"] = filename return item

復制過濾器

用于查找重復項目并刪除已處理的項目的過濾器。假設我們的項目具有唯一的ID,但是我們的蜘蛛會返回具有相同id的多個項目:

from scrapy.exceptions import DropItemclass DuplicatesPipeline(object): def __init__(self): self.ids_seen = set() def process_item(self, item, spider): if item['id'] in self.ids_seen: raise DropItem("Duplicate item found: %s" % item) else: self.ids_seen.add(item['id']) return item

激活項目管道組件

要激活項目管道組件,必須將其類添加到 ITEM_PIPELINES設置,類似于以下示例:

ITEM_PIPELINES = { 'myproject.pipelines.PricePipeline': 300, 'myproject.pipelines.JsonWriterPipeline': 800,}

您在此設置中分配給類的整數值確定它們運行的??順序:項目從較低值到較高值類。通常將這些數字定義在0-1000范圍內。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品白嫩初高中害羞小美女| 日本精品性网站在线观看| 一区二区福利视频| 久久亚洲精品一区二区| 久久精品久久久久电影| 国产盗摄xxxx视频xxx69| 久久久久久久久网站| 亚洲激情中文字幕| 日韩精品一区二区视频| 亚洲人成在线观看网站高清| 日本久久久久久| 亚洲欧美国产va在线影院| 欧洲s码亚洲m码精品一区| 播播国产欧美激情| 欧美激情aaaa| 成人免费直播live| 国产精品99久久久久久白浆小说| 91sao在线观看国产| 亚洲天堂av综合网| 日韩精品中文字幕久久臀| 国产91精品网站| 国产一区二区三区久久精品| 亚洲精品理论电影| 国产盗摄xxxx视频xxx69| 日本三级韩国三级久久| 中文字幕亚洲欧美日韩在线不卡| 欧美成aaa人片在线观看蜜臀| 成人黄色大片在线免费观看| 95av在线视频| 久久免费精品日本久久中文字幕| 久久久成人精品| 色哟哟网站入口亚洲精品| 欧美电影免费播放| 91九色国产社区在线观看| 欧美大码xxxx| 亚洲国产精品久久| 欧美日韩国产二区| 日韩国产在线看| 欧美在线不卡区| 欧美激情在线一区| 国语对白做受69| 亚洲wwwav| 国产xxx69麻豆国语对白| 亚洲精品在线91| 精品网站999www| 色哟哟网站入口亚洲精品| 韩剧1988在线观看免费完整版| 日韩美女毛茸茸| 久久久久www| 欧美日韩电影在线观看| 欧美视频免费在线观看| 日本高清视频精品| 26uuu另类亚洲欧美日本老年| 自拍偷拍亚洲一区| 亚洲人成电影在线观看天堂色| 中文日韩电影网站| 亚洲性xxxx| 91精品国产综合久久香蕉922| 日本欧美黄网站| 久久久免费电影| 这里只有精品视频在线| 亚洲偷欧美偷国内偷| 国产精品久久久久久久一区探花| 国产精品成人v| 日韩精品极品在线观看| 欧美国产视频一区二区| 欧美成人激情视频免费观看| 色777狠狠综合秋免鲁丝| 精品人伦一区二区三区蜜桃免费| 日韩暖暖在线视频| 国产综合久久久久久| 欧美不卡视频一区发布| 欧美日韩国产精品专区| 国内精品久久久久| 久久资源免费视频| 精品欧美国产一区二区三区| 国产精品9999| 国产精品久久久久久婷婷天堂| 97久久精品人搡人人玩| 国产97在线播放| 欧美午夜精品久久久久久浪潮| 久久久亚洲欧洲日产国码aⅴ| 秋霞午夜一区二区| 国产啪精品视频| 午夜精品理论片| 三级精品视频久久久久| 国产91色在线播放| 日韩在线视频中文字幕| 隔壁老王国产在线精品| 欧美精品第一页在线播放| 亚洲人午夜精品| 国产日韩中文字幕在线| 午夜精品一区二区三区av| 亚洲欧洲日产国产网站| 欧美另类在线观看| 欧美电影院免费观看| 亚洲另类欧美自拍| 尤物九九久久国产精品的特点| 亚洲欧美制服综合另类| 久久理论片午夜琪琪电影网| 97香蕉超级碰碰久久免费的优势| 国产精品久久久久福利| 日韩亚洲欧美中文高清在线| 欧美日韩精品在线| 国产精品日韩在线观看| 国产一区深夜福利| 91精品国产色综合久久不卡98| 亚洲国内精品视频| 亚洲欧美制服综合另类| 国产成人aa精品一区在线播放| 91在线免费看网站| 亚洲综合中文字幕在线| 亚洲小视频在线观看| 国产亚洲美女久久| 久久久久久国产精品久久| 亚洲欧美资源在线| 在线激情影院一区| 国产亚洲成精品久久| 久久久久久18| 欧美精品videos另类日本| 亚洲男人的天堂在线| 国产精品久久久久久久久免费看| 欧美精品电影免费在线观看| 亚洲精品国产综合区久久久久久久| 亚洲aⅴ日韩av电影在线观看| 国语自产精品视频在线看抢先版图片| 国产精品免费小视频| 日本高清+成人网在线观看| 日韩在线小视频| 狠狠色狠狠色综合日日小说| 国产精品中文字幕在线观看| 久久天天躁夜夜躁狠狠躁2022| 日韩欧美一区二区三区久久| 亚洲国产成人爱av在线播放| 日韩欧美极品在线观看| 岛国精品视频在线播放| 欧美日韩一区二区三区在线免费观看| 欧美精品久久久久久久免费观看| 久久国产精品久久久久久久久久| 色天天综合狠狠色| 国产精品免费一区豆花| 91影院在线免费观看视频| 国产精品欧美亚洲777777| 亚洲一区二区三区四区视频| 亚洲国产精品嫩草影院久久| 91大神在线播放精品| 亚洲成av人片在线观看香蕉| 日韩电影免费观看在线| 国产成人啪精品视频免费网| 国产精品日日摸夜夜添夜夜av| 欧美日韩国产成人在线| 亚洲欧美另类人妖| 成人免费在线网址| 国产97在线|日韩| 色综合视频网站| 欧美—级a级欧美特级ar全黄| 久久影院中文字幕| 欧美理论电影网| 成人在线精品视频| 国语自产精品视频在线看| 国产精品午夜一区二区欲梦| 孩xxxx性bbbb欧美| 国产亚洲精品美女久久久久| 欧美精品日韩三级|