Python自定義scrapy中間模塊避免重復(fù)采集的方法
本文實(shí)例講述了Python自定義scrapy中間模塊避免重復(fù)采集的方法。分享給大家供大家參考。具體如下:
from scrapy import log
from scrapy.http import Request
from scrapy.item import BaseItem
from scrapy.utils.request import request_fingerprint
from myproject.items import MyItem
class IgnoreVisitedItems(object):
"""Middleware to ignore re-visiting item pages if they
were already visited before.
The requests to be filtered by have a meta['filter_visited']
flag enabled and optionally define an id to use
for identifying them, which defaults the request fingerprint,
although you'd want to use the item id,
if you already have it beforehand to make it more robust.
"""
FILTER_VISITED = 'filter_visited'
VISITED_ID = 'visited_id'
CONTEXT_KEY = 'visited_ids'
def process_spider_output(self, response, result, spider):
context = getattr(spider, 'context', {})
visited_ids = context.setdefault(self.CONTEXT_KEY, {})
ret = []
for x in result:
visited = False
if isinstance(x, Request):
if self.FILTER_VISITED in x.meta:
visit_id = self._visited_id(x)
if visit_id in visited_ids:
log.msg("Ignoring already visited: %s" % x.url,
level=log.INFO, spider=spider)
visited = True
elif isinstance(x, BaseItem):
visit_id = self._visited_id(response.request)
if visit_id:
visited_ids[visit_id] = True
x['visit_id'] = visit_id
x['visit_status'] = 'new'
if visited:
ret.append(MyItem(visit_id=visit_id, visit_status='old'))
else:
ret.append(x)
return ret
def _visited_id(self, request):
return request.meta.get(self.VISITED_ID) or request_fingerprint(request)
希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python使用窮舉法求兩個(gè)數(shù)的最大公約數(shù)問(wèn)題
這篇文章主要介紹了Python使用窮舉法求兩個(gè)數(shù)的最大公約數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12
python的pyecharts繪制各種圖表詳細(xì)(附代碼)
這篇文章主要介紹了python的pyecharts繪制各種圖表詳細(xì)(附代碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
python suds訪問(wèn)webservice服務(wù)實(shí)現(xiàn)
這篇文章主要介紹了python suds訪問(wèn)webservice服務(wù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
python Opencv將圖片轉(zhuǎn)為字符畫(huà)
這篇文章主要為大家詳細(xì)介紹了python Opencv將圖片轉(zhuǎn)為字符畫(huà)的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
GPU排隊(duì)腳本實(shí)現(xiàn)空閑觸發(fā)python腳本實(shí)現(xiàn)示例
有的服務(wù)器是多用戶使用,GPU的資源常常被占據(jù)著,很可能在夜間GPU空閑了,但來(lái)不及運(yùn)行自己的腳本。如果沒(méi)有和別人共享服務(wù)器的話,自己的多個(gè)程序想排隊(duì)使用GPU,也可以用這個(gè)腳本2021-11-11
Python自動(dòng)化辦公之手機(jī)號(hào)提取
這篇文章主要介紹了如何利用Python語(yǔ)言編寫(xiě)一個(gè)手機(jī)號(hào)提取器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2022-06-06
Python Flask全棧項(xiàng)目實(shí)戰(zhàn)構(gòu)建在線書(shū)店流程
這篇文章主要為大家介紹了Python Flask全流程全棧項(xiàng)目實(shí)戰(zhàn)之在線書(shū)店構(gòu)建實(shí)現(xiàn)過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
python實(shí)現(xiàn)層次聚類(lèi)的方法
層次聚類(lèi)就是一層一層的進(jìn)行聚類(lèi),可以由上向下把大的類(lèi)別(cluster)分割,叫作分裂法,這篇文章主要介紹了python實(shí)現(xiàn)層次聚類(lèi)的方法,需要的朋友可以參考下2021-11-11
windows下安裝python的C擴(kuò)展編譯環(huán)境(解決Unable to find vcvarsall.bat)
這篇文章主要介紹了windows下安裝python的C擴(kuò)展編譯環(huán)境(解決Unable to find vcvarsall.bat),需要的朋友可以參考下2018-02-02
Python??處理?Pandas?DataFrame?中的行和列
這篇文章主要介紹了Python處理Pandas?DataFrame中的行和列,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09

