如何根据当前网址设置规则?

时间:2015-05-10 08:00:02

标签: python scrapy

我正在使用Scrapy,我希望能够更好地控制爬虫。为此,我想根据我正在处理的当前URL设置规则。

例如,如果我在example.com/a,我想应用LinkExtractor(restrict_xpaths='//div[@class="1"]')的规则。如果我在example.com/b,我想使用另一个规则和不同的链接提取器。

我如何做到这一点?

1 个答案:

答案 0 :(得分:2)

我只是在单独的回调中对它们进行编码,而不是依赖于CrawlSpider规则。

def parse(self, response):
    extractor = LinkExtractor(.. some default ..)

    if 'example.com/a' in response.url:
        extractor = LinkExtractor(restrict_xpaths='//div[@class="1"]')

    for link in extractor.extract_links(response):
        yield scrapy.Request(link.url, callback=self.whatever)

这比尝试在运行时更改规则要好,因为规则对于所有回调都应该是相同的。

在这种情况下,我刚刚使用了链接提取器,但是如果你想使用不同的规则,你可以做同样的事情,镜像相同的代码来处理规则in the loop shown from CrawlSpider._requests_to_follow