我正在做一个广泛的抓取。我需要处理每个网站的几个页面,以便为大约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),
)
1条答案
按热度按时间8qgya5xd1#
你需要重写spider的
parse_start_url
方法。第一个对网站的请求(主页url)由parse_start_url
方法处理。你可以在parse_start_url
方法内调用parse_page
。类似于: