在 scrapy 中每 starter_url 设置 allowed_domains?

Set allowed_domains per starter_url in scrapy?

有什么方法可以根据 start_url 设置 allowed_domains 吗?对于 start_url 中的每个 url,我想限制对 url 的域的抓取。抓取网站后,我需要将该域从 allowed_domains 中删除。我想一种方法是动态添加/删除 urls 到 allowed_domains?

相关问题:Crawl multiple domains with Scrapy without criss-cross

您可以尝试这样的操作,检查每个响应的蜘蛛 Requests 输出是否与该响应的域相同(警告:未测试):

from scrapy.http import Request
from scrapy.utils.httpobj import urlparse_cached

class CrissCrossOffsiteMiddleware(object):

    def process_spider_output(self, response, result, spider):
        domainr = urlparse_cached(response.url).hostname
        for x in result:
            if isinstance(x, Request):
                if x.dont_filter:
                    yield x
                else:
                    domaino = urlparse_cached(x).hostname
                    if domaino == domainr:
                        yield x
            else:
                yield x