gpt4 book ai didi

python - Scrapy:仅关注外部链接

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:44 24 4
gpt4 key购买 nike

OffsiteMiddleware您可以控制如何在 Scrapy 中跟踪外部链接。

我希望蜘蛛程序忽略站点上的所有内部链接跟踪外部链接。

Dynamic rules将响应 URL 域添加到 deny_domains 无效。

你能覆盖 OffsiteMiddleware 中的 get_host_regex 来过滤掉所有现场链接吗?还有其他办法吗?

说明:我希望蜘蛛程序忽略 allowed_domains 中定义的域以及所抓取的每个域上的所有内部链接。因此,当蜘蛛位于该 URL 上时,必须忽略蜘蛛后跟的每个 URL 的域。 换句话说:当爬虫到达像 example.com 这样的网站时,我希望它忽略 example.com 上的任何链接,只跟踪指向不在 example.com 上的网站的外部链接。

最佳答案

您可以通过简单地反转 should_follow() 方法来创建反向异地中间件:

#mycrawler.middlewares.py

from scrapy.spidermiddlewares.offsite import OffsiteMiddleware
from scrapy.utils.httpobj import urlparse_cached

class ReverseOffsiteMiddleware(OffsiteMiddleware):

seen = set()

def should_follow(self, request, spider):
allowed_domains = not super().should_follow(request, spider)
# if failed to pass reverse allowed_domains don't follow
if not allowed_domains:
return False

# if visited domain before do not schedule request
domain = urlparse_cached(request).hostname
if domain in self.seen:
return False
# otherwise add to seen domain set and schedule request
self.seen.add(domain)
return True

然后在您的 settings.py 中激活它:

# settings.py
SPIDER_MIDDLEWARES = {
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': None,
'mycrawler.middlewares.ReverseOffsiteMiddleware': 500,
}

现在 spider.allowed_domains 中的所有域都将被忽略 :)

关于python - Scrapy:仅关注外部链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53547246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com