scrapy scrappy允许所有子域

6qqygrtg  于 2023-01-05  发布在  其他
关注(0)|答案(3)|浏览(178)

我想使用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)

编辑为了使问题更清楚,我希望能够抓取所有 *. example.com-〉,意思是不获取Filtered offsite request to 'foo.example.com'
另一个编辑根据@agstudy的回答,请确保不要忘记删除allowed_domains = ["www.example.com"]

62o28rlo

62o28rlo1#

如果您不使用规则,而是使用Spider的allowed_domains class属性,您也可以设置allowed_domains = ['example.com'],这将允许example.com的所有子域,例如foo.example.com

xxls0lw8

xxls0lw82#

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

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

例如:

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

这将过滤允许的URL,如:

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

jjhzyzn03#

要使用Scrapy爬网网站并允许所有子域,您可以使用CrawlSpider,其规则不包括RestrictedDomain约束。以下是如何执行此操作的示例:

from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class MySpider(CrawlSpider):
    name = "myspider"
    allowed_domains = ["example.com"]  # Don't forget to delete this line!
    start_urls = [
        "http://www.example.com/start_page",
    ]
    rules = (
        Rule(LinkExtractor(), callback="parse_page", follow=True),
    )

    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)
        # Parse the item here
        # ...

相关问题