Scrapy 如何忽略带有查询字符串的URL(?xxx=xxx)
我希望我的爬行器忽略任何具有查询字符串的URL。我曾尝试在LinkedExtractor(见下文)中的拒绝规则(用于Scrapy 如何忽略带有查询字符串的URL(?xxx=xxx),scrapy,scrapy-spider,Scrapy,Scrapy Spider,我希望我的爬行器忽略任何具有查询字符串的URL。我曾尝试在LinkedExtractor(见下文)中的拒绝规则(用于\?)中添加一个表达式,但它被忽略了。我的爬行器仍在爬行/提取包含?字符的URL 我只有一个起始URL,它是我的域的根,所以抓取链接的唯一方法是通过LinkExtractor 这是爬行蜘蛛实现中的唯一规则 Rule(LinkExtractor( allow=(), deny=(':443', ':80', '\?', )),
\?
)中添加一个表达式,但它被忽略了。我的爬行器仍在爬行/提取包含?
字符的URL
我只有一个起始URL,它是我的域的根,所以抓取链接的唯一方法是通过LinkExtractor
这是爬行蜘蛛实现中的唯一规则
Rule(LinkExtractor(
allow=(),
deny=(':443', ':80', '\?', )),
callback='parse_page',
follow=True),
)
将排除包含端口号的URL,但仍将包括任何包含?
的URL
不要讨论这个特定的用例——至少我找不到它
有人知道如何从提取中排除包含查询字符串的URL吗
我正在使用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
在deny
https?:/(?:[^/]+/?)+\?.*
中尝试此模式,看看是否有效谢谢您的评论。不幸的是,当我尝试使用该拒绝规则运行爬网时,scrapy挂起。那么*\?.
Ye呢,我已经尝试过了,并且尝试了另外10种不同的表达式。出于某种原因,scrapy似乎忽略了任何包含?
的表达式。我找到了一种使用过滤函数的替代方法-请参阅更新。谢谢你抽出时间。