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

我的Scrapy爬虫未抓取到数据,请求帮忙排查问题

问题分析与修复方案

从你提供的Scrapy运行日志和代码来看,爬虫未抓取到任何数据的核心原因如下:

1. 静态time.sleep完全无效

你在类定义中直接写入time.sleep(0.5),这行代码只会在爬虫类加载阶段执行一次,不会在请求过程中起到延迟作用。Scrapy是异步框架,这种同步sleep方式完全不适用,要实现请求限流,应该在settings.py中配置DOWNLOAD_DELAY。

2. XPath选择器过于脆弱且存在结构匹配错误

你的LinkExtractor依赖精确的style属性值和表格索引,一旦网站前端样式微调(比如style里的空格、表格顺序变动),选择器就会失效。另外,浏览器调试时看到的tbody标签大多是浏览器自动补全的,Scrapy获取的原始HTML中可能不存在该标签,直接使用会导致路径断裂,无法定位到目标链接。

3. 未验证响应内容与页面实际结构是否匹配

虽然日志显示请求返回200状态码,但你需要确认Scrapy获取的响应内容是否和浏览器中看到的一致——部分网站会通过反爬策略返回空内容或伪装页面,这时候需要打印response.text来验证实际返回的HTML结构。


修复后的代码示例

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

class SoccerstatsSpider(CrawlSpider):
    name = 'soccerstats'
    allowed_domains = ['soccerstats.com']
    start_urls =['https://www.soccerstats.com/latest.asp?league=turkey']

    # 改用更健壮的CSS选择器,避免依赖精确属性和tbody标签
    rules = (
        Rule(LinkExtractor(restrict_css="div[style*='width:644px'] table tr.odd td:nth-child(2) a"), 
             callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        # 简化Team选择器,增加容错性
        team_name = response.xpath(".//div[@id='content']//font/text()").get()
        if team_name:
            yield{
                'Team' : team_name.strip()
            }

额外配置建议(修改settings.py)

# 启用下载延迟,替代无效的time.sleep
DOWNLOAD_DELAY = 1
# 确保User-Agent正确生效
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'
# 禁用Cookies,避免部分反爬拦截
COOKIES_ENABLED = False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:26:12