Scrapy CrawlSpider未按预期抓取全部链接的问题与需求实现
解决Scrapy CrawlSpider递归抓取分类与产品页的问题
首先修正你的rules配置,不需要依赖URL正则模式,直接通过CSS选择器定位不同层级的链接来区分分类页和产品页,同时纠正restrict_css的写法错误:
name = 'recursiveSpider' allowed_domains = ['industrialnetworking.com'] # 若不是特殊需求,建议保留默认去重器,避免重复爬取浪费资源 # custom_settings = { # 'DUPEFILTER_CLASS' : 'scrapy.dupefilters.BaseDupeFilter', # } start_urls = [ 'https://www.industrialnetworking.com/Manufacturers/Hirschmann' ] rules = ( # 规则1:抓取分类/子分类链接,继续递归跟进 Rule(LinkExtractor(restrict_css='div.catCell a'), follow=True), # 规则2:抓取产品页链接,交给parse_new_item处理 Rule(LinkExtractor(restrict_css='td.cellDesc h2 a'), callback='parse_new_item'), )
关键说明:
- 分类链接处理:第一条Rule通过
div.catCell a定位所有分类/子分类的a标签,follow=True让爬虫自动递归访问这些链接,深入下一层级页面。- 注意:
restrict_css是用来定位包含链接的元素(即a标签),不需要添加::attr(href),Scrapy会自动提取a标签的href属性。你原来的写法会导致无法正确提取链接。
- 注意:
- 产品链接处理:第二条Rule仅提取产品页特有的
td.cellDesc h2 a链接,这类链接指向最终的产品详情页,提取后直接调用parse_new_item函数处理产品数据。 - 去重器建议:除非有特殊需求,否则不建议禁用默认去重器,否则会导致爬虫重复爬取相同页面,浪费资源。
这样配置后,爬虫会自动遍历所有分类层级,遇到包含产品链接的页面时,就会提取并处理产品页,完全符合你想要的递归抓取逻辑。
内容的提问来源于stack exchange,提问作者Shadobladez
相关产品推荐
相关产品推荐

