Scrapy Crawl Spider未跟进链接问题求助
解决Scrapy CrawlSpider无法跟进链接的问题
我来帮你排查这个问题,从你提供的日志和代码来看,CrawlSpider没有爬取任何页面,大概率是链接提取器(LinkExtractor)没有匹配到任何有效链接,或者网站的基础反爬机制拦截了你的请求。下面一步步分析和解决:
一、核心排查:LinkExtractor的匹配规则是否失效
你当前Rule里用的XPath //tr/td/div/div/div[2]/div/a 可能已经无法匹配页面中的产品链接了——网站的页面结构可能更新过,或者这个路径本来就不够精准。
你可以用Scrapy Shell快速验证这个问题:
- 打开终端,运行:
scrapy shell https://de.rs-online.com/web/c/automation/elektromechanische-magnete/hubmagnete-linear/
- 在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
相关产品推荐
相关产品推荐

