scrapy允许所有子域

Boa*_*oaz 5 python scrapy

我想在网站上使用scrapy,因为它的页面分为许多子域,我知道我需要用CrawlSpiderRule但是我需要规则是“允许所有子域,让解析器根据数据自行处理”(意思是-在示例中,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)
Run Code Online (Sandbox Code Playgroud)

**编辑**为了使问题更清楚,我希望能够抓取所有* .example.com->表示不获取 Filtered offsite request to 'foo.example.com'

**另一个编辑**按照@agstudy的回答,确保您不要忘记删除 allowed_domains = ["www.example.com"]

bar*_*man 5

如果您没有使用规则,而是在使用allowed_domainsSpider 的class属性,则还可以设置allowed_domains = ['example.com']。这样将允许example.com诸如的所有子域foo.example.com


ags*_*udy 4

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

rules = (
       Rule(SgmlLinkExtractor(allow_domains=('domain1','domain2' ), ),)
Run Code Online (Sandbox Code Playgroud)

例如:

rules = (
       Rule(SgmlLinkExtractor(allow_domains=('example.com','example1.com' ), ),)
Run Code Online (Sandbox Code Playgroud)

这将过滤允许的网址,例如:

www.example.com/blaa/bla/
www.example1.com/blaa/bla/
www.something.example.com/blaa/bla/
Run Code Online (Sandbox Code Playgroud)

  • 对,就是这样。该规则是精确匹配域或 endwith 域。 (2认同)