跳转到主要内容

Scrapy中间件,允许只爬取新内容

项目描述

scrapy-crawl-once

PyPI Version Build Status Code Coverage

此软件包提供了一个Scrapy中间件,允许避免重新爬取先前爬取中已下载的页面。

许可证为MIT。

安装

pip install scrapy-crawl-once

使用

要启用它,修改您的settings.py

SPIDER_MIDDLEWARES = {
    # ...
    'scrapy_crawl_once.CrawlOnceMiddleware': 100,
    # ...
}

DOWNLOADER_MIDDLEWARES = {
    # ...
    'scrapy_crawl_once.CrawlOnceMiddleware': 50,
    # ...
}

默认情况下,它什么都不做。要避免爬取特定页面多次,请设置request.meta['crawl_once'] = True。当收到响应且回调成功时,此类请求的指纹将存储到数据库中。当蜘蛛安排新的请求时,中间件首先检查其指纹是否在数据库中,如果存在,则丢弃该请求。

其他request.meta

  • crawl_once_value - 要存储在数据库中的值。默认情况下,存储时间戳。

  • crawl_once_key - 请求唯一ID;默认使用request_fingerprint。

设置

  • CRAWL_ONCE_ENABLED - 将其设置为False以禁用中间件。默认为True。

  • CRAWL_ONCE_PATH - 存储已爬取请求数据库的文件夹路径。默认情况下,使用项目目录下的 .scrapy/crawl_once/ 路径;此文件夹包含 <spider_name>.sqlite 文件,其中包含已看到的请求数据库。

  • CRAWL_ONCE_DEFAULT - crawl_once 元数据键的默认值(默认为 False)。当为 True 时,除非显式禁用(使用 request.meta['crawl_once'] = False),否则所有请求都由该中间件处理。

替代方案

https://github.com/scrapy-plugins/scrapy-deltafetch 是一个类似的包;它几乎做同样的事情。差异

  • scrapy-deltafetch 根据生成的项目选择是否丢弃请求;scrapy-crawl-once 使用显式的 request.meta['crawl_once'] 标志。

  • scrapy-deltafetch 使用 bsddb3,而 scrapy-crawl-once 使用 sqlite。

另一种替代方案是内置的 Scrapy HTTP 缓存。差异

  • scrapy 缓存将所有页面存储在磁盘上,而 scrapy-crawl-once 只保留请求指纹;

  • scrapy 缓存允许更细粒度的失效,与浏览器的操作方式一致;

  • 使用 scrapy 缓存时,所有页面仍然会被处理(尽管不是所有页面都会被下载)。

贡献

要运行测试,请安装 tox 并从源代码签出运行 tox

变更记录

0.1.1 (2017-03-04)

  • scrapy 统计中的新 'crawl_once/initial' 值 - 它包含 crawl_once 数据库的初始大小(记录数)。

0.1 (2017-03-03)

初始发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

scrapy-crawl-once-0.1.1.tar.gz (5.1 kB 查看哈希值

上传时间 源代码

构建分发

scrapy_crawl_once-0.1.1-py2.py3-none-any.whl (7.2 kB 查看哈希值

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面