我希望我的蜘蛛忽略任何带有查询字符串的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