仅允许Scrapy内部链接

2 投票
1 回答
788 浏览
提问于 2025-04-17 07:51

我有一份包含3000个网址的列表,想要从中提取信息。

我希望在每个网址上深入抓取三层内容,但我不想访问外部网址,只想抓取我开始列表中的域名内的链接。

我明白如果只有几个网址,我可以简单地把allowed_domains列表填上。

但是当网址数量达到3000时,allowed_domains列表就太大了,Scrapy处理不了(据我所知,它会把这个列表变成一个复杂的正则表达式),所以就出问题了……

有没有什么好的建议呢?

在“规则”列表中添加一些内容可能会有帮助。rules = (Rule(SgmlLinkExtractor(allow = (<local_links_only??>)) ,callback = 'parse_item'),)

或者在外部中间件中,有没有办法获取到引用链接?

或者把任务分批处理?一次处理50个网址?有没有什么方法可以实现这样的功能——我看到有start_requests,但没有类似finish_requests的回调可以用来重新填充start_urls列表?

谢谢!

1 个回答

2
  1. 使用 DepthMiddleware 来控制请求的深度。
  2. 使用 allow_domains 来避免抓取外部网址。
  3. 调整 并发设置 以提高性能。

撰写回答