scrapy允许所有子域名

5 投票
2 回答
5132 浏览
提问于 2025-04-18 08:11

我想用Scrapy来爬一个网站,这个网站的页面分布在很多子域名下。我知道我需要一个CrawlSpider和一个Rule,但是我希望这个规则能简单点,就是“允许所有子域名,让解析器根据数据自己处理”(意思是,在这个例子中,item_links在不同的子域名里)。

代码示例:

def parse_page(self, response):
    sel = Selector(response)
    item_links = sel.xpath("XXXXXXXXX").extract()
    for item_link in item_links:
            item_request = Request(url=item_link,
                                     callback=self.parse_item)
            yield item_request

def parse_item(self, response):
    sel = Selector(response)

** 编辑 ** 为了让问题更清楚,我想要能够爬取所有的*.example.com -> 这意味着不想收到Filtered offsite request to 'foo.example.com'的提示。

** 另一个编辑 ** 根据@agstudy的回答,确保不要忘记删除allowed_domains = ["www.example.com"]这行代码。

2 个回答

5

如果你没有使用规则,而是使用了爬虫的 allowed_domains 类属性,你可以这样设置 allowed_domains = ['example.com']。这样一来,所有 example.com 的子域名,比如 foo.example.com,都可以被访问。

4

你可以为这个规则设置一个 allow_domains 列表:

rules = (
       Rule(SgmlLinkExtractor(allow_domains=('domain1','domain2' ), ),)

比如说:

rules = (
       Rule(SgmlLinkExtractor(allow_domains=('example.com','example1.com' ), ),)

这样就会过滤出允许的链接,比如:

www.example.com/blaa/bla/
www.example1.com/blaa/bla/
www.something.example.com/blaa/bla/

撰写回答