• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python自定义scrapy中间模块避免重复采集的方法

Python自定义scrapy中间模块避免重复采集的方法

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python3安装scrapy,python scrapy,python3.5安装scrapy,python scrapy安装,scrapy python3等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了Python自定义scrapy中间模块避免重复采集的方法。分享给大家供大家参考。具体如下:

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)
</div>

希望本文所述对大家的Python程序设计有所帮助。

</div>

您可能想查找下面的文章:

  • Python抓取框架 Scrapy的架构
  • Python自定义scrapy中间模块避免重复采集的方法

相关文章

  • 跟老齐学Python之用Python计算
  • Python中的map()函数和reduce()函数的用法
  • python调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
  • Python数组遍历的简单实现方法小结
  • Python环境下安装使用异步任务队列包Celery的基础教程
  • 在Python的框架中为MySQL实现restful接口的教程
  • 收藏整理的一些Python常用方法和技巧
  • Python 第一步 hello world
  • Python中输出ASCII大文字、艺术字、字符字小技巧
  • Python多线程经典问题之乘客做公交车算法实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python回溯法实现数组全排列输出实例分析
    • Python 变量类型及命名规则介绍
    • 实例说明Python中比较运算符的使用
    • Python函数可变参数定义及其参数传递方式实例详解
    • python数据结构之二叉树的统计与转换实例
    • Django日志模块logging的配置详解
    • Python3.2模拟实现webqq登录
    • Python读取mp3中ID3信息的方法
    • 在Python中使用M2Crypto模块实现AES加密的教程
    • python统计cpu利用率的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有