如何忽略带有查询字符串的URL(?xxx = xxx)

时间:2017-09-12 10:03:34

标签: scrapy scrapy-spider

我希望我的蜘蛛忽略任何带有查询字符串的URL。我已经尝试在我的LinkExtractor(见下文)中为deny规则添加一个表达式(对于\?),但它会被忽略,即。我的蜘蛛仍在抓取/提取包含?字符的网址。

我只有1个起始URL,这是我的域的根,所以抓取链接的唯一方法是通过LinkExtractor。

这是我的CrawlSpider实现中唯一的规则。

Rule(LinkExtractor(
            allow=(), 
            deny=(':443', ':80', '\?', )), 
            callback='parse_page', 
            follow=True),
)

正在排除包含端口号的网址,但仍然包含任何包含?的网址。

docs不讨论这个特定的用例 - 至少我找不到它。

任何人都有关于如何排除包含查询字符串的网址的想法?

我正在使用Scrapy 1.4.0。

更新

出于某种原因,scrapy似乎忽略了LinkExtractor定义的?属性中包含deny字符的任何表达式。然而,我得到了一种过滤链接工作的替代方法。

Rule(LinkExtractor(
            allow=(), 
            deny=(':443', ':80', )),
            process_links='filter_links', 
            callback='parse_page', 
            follow=True),

    def filter_links(self, links):
        for link in links:
            if '?' in link.url:
                continue
            else:
                yield link

0 个答案:

没有答案