Scrapy CrawlSpider允许和拒绝规则

时间:2018-06-25 17:36:07

标签: regex scrapy

我正在尝试对网站进行爬网,我希望它对其中包含“类别”的所有页面进行爬网,除非它们具有“ ecatalog”。如果ecatalog在网址中,请不要抓取,将其包含在输出中。

我只是在允许范围内添加了“目录”,这似乎可行,因为它处理的所有网址似乎都包含“目录”。它可能无需构建完整的正则表达式就可以工作(但是由于大多数网址都有类别,所以我无法确定。但是,无论何时我将任何内容置于拒绝值中,它最终只会刮掉站点地图页面然后停止。

我尝试了这三个和其他几个。让我感到困惑的是,我会假设如果我的拒绝价值很差,它将不会拒绝任何事情,所有的ursl都会回来。取而代之的是,deny中的任何值都会使其在第一个URL之后消失。

deny='ecatalog'
deny='.*eatalog.*
deny='/.*ecatalog.*'

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class ElectronicsSpider(CrawlSpider):
    name = "example"
allowed_domains = ["www.example.com"]
start_urls = [
    'https://www.example.com/content/sitemap'
]

rules = (
    Rule(LinkExtractor(allow='/category', deny='/ecatalog'),
         callback="parse_item",
         follow=True),)

def parse_item(self, response):
    print('Processing..' + response.url)

0 个答案:

没有答案