跳转到主要内容

Scrapy中间件,允许Scrapy爬虫过滤请求。

项目描述

Scrapy-link-filter

Python ver Build Status Code coverage Code style: black

允许Scrapy爬虫过滤请求的爬虫中间件。CrawlSpider已经使用规则和RobotsTxtMiddleware提供了类似功能,但这里有所不同。此中间件允许动态地按请求定义规则,或作为爬虫参数而不是项目设置。

安装

此项目需要Python 3.6+和pip。强烈建议使用虚拟环境

$ pip install git+https://github.com/croqaz/scrapy-link-filter

使用

要将中间件作为爬虫中间件启用,必须在项目的settings.py中添加。

SPIDER_MIDDLEWARES = {
    # maybe other Spider Middlewares ...
    # can go after DepthMiddleware: 900
    'scrapy_link_filter.middleware.LinkFilterMiddleware': 950,
}

或者,它可以在项目的settings.py中作为下载器中间件启用

DOWNLOADER_MIDDLEWARES = {
    # maybe other Downloader Middlewares ...
    # can go before RobotsTxtMiddleware: 100
    'scrapy_link_filter.middleware.LinkFilterMiddleware': 50,
}

规则必须在爬虫实例中、在spider.extract_rules字典中或按请求在request.meta['extract_rules']中定义。内部,extract_rules字典被转换为LinkExtractor,用于匹配请求。

注意 默认情况下,URL匹配是区分大小写的,这在大多数情况下都适用。为了启用不区分大小写的匹配,您可以在每个需要不区分大小写的“允许”或“拒绝”规则的开头指定一个“(?i)”内联标志。

在爬虫实例上的特定允许过滤器示例

from scrapy.spiders import Spider

class MySpider(Spider):
    extract_rules = {"allow_domains": "example.com", "allow": "/en/items/"}

或在请求元数据中的特定拒绝过滤器

request.meta['extract_rules'] = {
    "deny_domains": ["whatever.com", "ignore.me"],
    "deny": ["/privacy-policy/?$", "/about-?(us)?$"]
}

可能的字段有

  • allow_domainsdeny_domains - 一个或多个特定限制或拒绝的域名
  • allowdeny - 一个或多个子字符串或模式,用于特定允许或拒绝

所有字段都可以定义为字符串、列表、集合或元组。


许可证

BSD3 © Cristi Constantin.

项目详情


下载文件

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

源分发

scrapy-link-filter-0.2.0.tar.gz (5.4 kB 查看哈希值)

上传时间

构建分发

scrapy_link_filter-0.2.0-py3-none-any.whl (6.2 kB 查看哈希值)

上传时间 Python 3

支持者