You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy Crawl Spider未跟进链接问题求助

解决Scrapy CrawlSpider无法跟进链接的问题

我来帮你排查这个问题,从你提供的日志和代码来看,CrawlSpider没有爬取任何页面,大概率是链接提取器(LinkExtractor)没有匹配到任何有效链接,或者网站的基础反爬机制拦截了你的请求。下面一步步分析和解决:

一、核心排查:LinkExtractor的匹配规则是否失效

你当前Rule里用的XPath //tr/td/div/div/div[2]/div/a 可能已经无法匹配页面中的产品链接了——网站的页面结构可能更新过,或者这个路径本来就不够精准。

你可以用Scrapy Shell快速验证这个问题:

  1. 打开终端,运行:
scrapy shell https://de.rs-online.com/web/c/automation/elektromechanische-magnete/hubmagnete-linear/
  1. 在shell里测试你的LinkExtractor:
from scrapy.linkextractors import LinkExtractor
le = LinkExtractor(restrict_xpaths="//tr/td/div/div/div[2]/div/a")
links = le.extract_links(response)
print(len(links))  # 如果输出0,说明XPath完全没匹配到链接

如果输出0,那肯定是匹配规则的问题。建议换用URL模式匹配(更稳定,不受页面结构小变动影响),因为这个网站的产品页面URL都有固定格式(类似 https://de.rs-online.com/web/p/...),用allow参数匹配更可靠:

Rule(LinkExtractor(allow=r'/web/p/.*'), callback='parse_item', follow=True),

二、检查反爬拦截:User-Agent设置

有些网站会拦截Scrapy默认的User-Agent(Scrapy/VERSION (+https://scrapy.org)),导致请求返回空页面或者被拒绝。这可能也是基础Spider能工作,但CrawlSpider不行的原因——如果你在基础Spider里手动设置了浏览器UA,而CrawlSpider用了默认值。

你可以在settings.py里添加一个浏览器的User-Agent:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'

三、修正后的完整代码

结合上面的调整,修改后的CrawlSpider代码如下:

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

class ProductSpider(CrawlSpider):
    name = 'product'
    allowed_domains = ['de.rs-online.com']
    start_urls = ['https://de.rs-online.com/web/c/automation/elektromechanische-magnete/hubmagnete-linear/']

    # 改用URL模式匹配产品链接,稳定性更强
    rules = (
        Rule(LinkExtractor(allow=r'/web/p/[^/]+/$'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        yield {
            'Title': response.xpath("//h1/text()").get(),
            'Categories': response.xpath("(//ol[@class='Breadcrumbstyled__StyledBreadcrumbList-sc-g4avu2-1 gHzygm']/li/a)[4]/text()").get(),
            'RS Best.-Nr.': response.xpath("//dl[@data-testid='key-details-desktop']/dd[1]/text()").get(),
            'URL': response.url
        }

四、额外优化建议

  • 如果目标页面有分页,你需要添加另一个Rule来跟进分页链接(比如匹配分页按钮的XPath或URL模式),确保能爬完所有产品。
  • 开启Scrapy的DEBUG日志(在settings.py里设置LOG_LEVEL = 'DEBUG'),可以看到更多请求细节,比如链接提取情况、响应状态码等,方便后续排查。

内容的提问来源于stack exchange,提问作者Raisul Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 13:12:31