scrapy 使CrawlSpider处理主页上的数据+其他提取的链接

ezykj2lf  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(162)

我正在做一个广泛的抓取。我需要处理每个网站的几个页面,以便为大约20个分类规则中的一个设置值。例如,一个分类规则是“Has Phone Number”(运行一个正则表达式来查看页面源代码中是否有电话号码,并返回一个布尔值)。这些规则在一个名为parse_page()的函数中实现。
我需要CrawlSpider在每个被抓取网站的主页上运行parse_page(),以及其他常见页面,如关于页面、联系人页面、隐私政策页面等。
当我运行spider时,它从www.example.com开始some-site.com,并根据下面代码中的规则定义抓取页面。
我的问题在于我需要parse_page()在www.example.com的 * 主页 * 上运行some-site.com(parse_page()目前只在some-site.com/contact-us,some-site.com/about-us等网站上运行)。如何指定Rule()以包含站点的主页,以便为主页以及其他已包含的页面调用parse_page()?

class SomeBotSpider(scrapy.spiders.CrawlSpider):
     name = 'some_bot'
     allowed_domains = ['some-site.com']
     start_urls = ['https://some-site.com/']

      rules = (
         Rule(LinkExtractor(allow='/contact'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclaimer'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclosure'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='/about'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='privacy'), callback='parse_page', follow=True),
     )
8qgya5xd

8qgya5xd1#

你需要重写spider的parse_start_url方法。第一个对网站的请求(主页url)由parse_start_url方法处理。你可以在parse_start_url方法内调用parse_page。类似于:

class SomeBotSpider(scrapy.spiders.CrawlSpider):
    name = 'some_bot'
    allowed_domains = ['some-site.com']
    start_urls = ['https://some-site.com/']

    rules = (
         Rule(LinkExtractor(allow='/contact'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclaimer'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='disclosure'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='/about'), callback='parse_page', follow=True),
         Rule(LinkExtractor(allow='privacy'), callback='parse_page', follow=True),
     )

    def parse_start_url(self, response):
        return self.parse_page(response)

相关问题