一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python自定義scrapy中間模塊避免重復采集的方法

Python自定義scrapy中間模塊避免重復采集的方法

2020-05-31 10:47pythoner Python

這篇文章主要介紹了Python自定義scrapy中間模塊避免重復采集的方法,實例分析了Python實現采集的技巧,非常具有實用價值,需要的朋友可以參考下

本文實例講述了Python自定義scrapy中間模塊避免重復采集的方法。分享給大家供大家參考。具體如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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)

希望本文所述對大家的Python程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 网友自拍偷拍 | 热久久免费视频 | 翁用力的抽插 | 国产自拍专区 | 亚洲香蕉伊在人在线观看9 亚洲系列国产系列 | 日韩免费在线观看 | 和肥岳在厨房激情 | caoporm国产精品视频免费 | 春光乍泄在线 | 欧美一级乱妇老太婆特黄 | 窝窝午夜精品一区二区 | 国产欧美日韩在线播放 | 精品视频网站 | ova巨公主催眠1在线观看 | 999精品视频这里只有精品 | 全色黄大色黄大片爽一次 | 欧美日韩国产精品va | 天天做天天爱天天爽综合区 | 明星ai人脸替换脸忘忧草 | 三级欧美在线 | 边摸边吃奶边做爽gif动态图 | 国产成人免费在线观看 | 国产精品久久国产精品99 | 1313午夜精品久久午夜片 | 午夜dj影院在线视频观看完整 | 国产成人精品曰本亚洲77美色 | 99精品在线视频观看 | 国产精品欧美韩国日本久久 | 国产另类视频一区二区三区 | 色老板在线播放 | 久久综合久久伊人 | 操骚0 | 99九九成人免费视频精品 | 欧美亚洲一区二区三区 | 免费视频一区 | kisssis无减删全集在线观看 | 久久爽狠狠添AV激情五月 | 欧美艳星kagneyiynn高清 | 亚飞与亚基高清国语在线观看 | 日本邪恶动态 | 久久理论片迅播影院一级 |