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

使用Scrapy CrawlSpider爬取rusplast.com时数据未解析,求排查

问题分析与修正

你的爬虫代码存在以下几个关键问题:

  • 拼写错误导致域名过滤失效
    代码里的allowed_domailns是拼写错误,正确属性名应为allowed_domains。这个错误会让Scrapy的域名过滤机制失效,导致爬虫无法正确识别允许爬取的域名,进而无法获取目标页面数据。

  • 正则表达式未使用原始字符串,匹配规则失效
    两个LinkExtractor的allow和deny参数里的正则表达式未使用原始字符串(r''),会导致转义字符失效。比如\d在普通字符串里无法被正则引擎正确识别为数字匹配,/?BRAND也无法正确匹配带参数的URL。

  • 第一个Rule逻辑冗余,干扰正常爬取
    第一个Rule仅设置了allow和deny但未指定callback,默认会跟随匹配到的链接,但这个规则匹配范围过宽(只要包含abs-plastic的URL都会被跟随),会爬取大量无关页面,甚至覆盖第二个Rule的匹配逻辑。

  • CSS选择器无容错处理,易引发报错
    如果目标页面的h1标签不带有header类,response.css('h1.header::text').get()会返回None,调用.strip()时直接触发报错,导致数据解析失败。


修正后的代码

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

class RusplastSpider(CrawlSpider):
    name = 'rusplast_crawl'
    allowed_domains = ['rusplast.com']  # 修正拼写错误
    start_urls = ['https://rusplast.com/catalog/abs-plastic/']

    rules = (
        # 直接匹配产品详情页URL,指定回调函数并允许跟随
        Rule(LinkExtractor(allow=r'/abs-plastic/\d+/'), callback='parse_items', follow=True),
        # 若需处理分页,可添加如下规则(按需启用)
        # Rule(LinkExtractor(allow=r'/abs-plastic/\?PAGEN_1=\d+'), follow=True),
    )
        
    def parse_items(self, response):
        # 增加容错处理,避免因元素不存在报错
        product_name = response.css('h1.header::text').get()
        yield {
            'Name': product_name.strip() if product_name else '无产品名称',
        }

额外建议

  1. 用Scrapy Shell测试选择器有效性:运行scrapy shell https://rusplast.com/catalog/abs-plastic/[具体产品ID]/,输入response.css('h1.header::text').get()验证是否能获取到产品名称。
  2. 若网站有反爬机制,在settings.py中添加USER_AGENT模拟真实浏览器请求。

内容的提问来源于stack exchange,提问作者Vladislav F.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:45:11