如何配置Scrapy CrawlSpider规则,让parse_page处理首页及指定页面
解决Scrapy CrawlSpider首页未被parse_page处理的问题
这个问题我之前也碰到过,核心原因是CrawlSpider的默认行为:起始URL(也就是你设置的start_urls里的首页)会被交给内置的parse方法处理,而你定义的rules只会对从页面中提取到的匹配链接生效,所以首页不会触发parse_page。
这里有两个简单且不破坏现有逻辑的解决方案:
方法1:重写parse_start_url方法
这是最贴合CrawlSpider设计的方案,parse_start_url是框架专门提供用来处理起始URL响应的钩子方法,既能处理首页,又能保证现有rules正常执行。
修改你的爬虫代码,添加这个方法即可:
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): # 调用parse_page处理首页内容 yield from self.parse_page(response) # 让CrawlSpider继续处理页面中的链接,确保rules逻辑不中断 return self._parse_response(response, self.parse, cb_kwargs={})
方法2:重写parse方法直接调用parse_page
如果你觉得parse_start_url有点抽象,也可以直接重写默认的parse方法,先处理首页,再让父类的parse逻辑继续执行(也就是让rules生效):
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(self, response): # 先处理首页的分类规则 yield from self.parse_page(response) # 调用父类的parse方法,让rules继续抓取后续页面 yield from super().parse(response)
避坑提醒
千万别直接修改start_requests方法,把起始URL的callback设为parse_page——这样会跳过CrawlSpider的核心parse逻辑,导致你定义的所有rules完全失效,再也抓取不到其他页面了。
两种方案都能完美解决你的问题,选一个顺手的用就行~
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

