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

Scrapy爬虫爬取0页问题:爬取StackOverflow问答页失败求助

排查Scrapy爬虫"爬取0页面"的问题

我正在创建一个简单的Scrapy项目来深入了解它的用法,目标是爬取StackOverflow的问答页面。我的爬虫名为first,代码如下:

# -*- coding: utf-8 -*- 
import scrapy 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 

class FirstSpider(CrawlSpider): 
    name = 'first' 
    allowed_domains = ['stackoverflow.com'] 
    start_urls = ['https://stackoverflow.com/questions'] 
    rules = ( 
        Rule(LinkExt...

执行scrapy crawl first命令后出现“Crawled 0 pages”提示,请求排查原因并解决。


我的排查与解决方案

嘿,我来帮你搞定这个问题!用CrawlSpider却爬不到页面,大概率是几个常见的配置问题,咱们一个个来理清楚:

1. 你的Rules规则不完整(最可能的原因)

看你代码里的rules只写到Rule(LinkExt...就截断了,这绝对是核心问题!CrawlSpider完全靠rules来决定要跟进哪些链接、怎么解析页面——如果规则没写完,爬虫根本不知道该怎么处理起始页面的内容,自然不会爬取任何页面。

给你一个适配Stack Overflow问题列表的完整rules示例:

rules = (
    # 跟进问题列表的分页链接(比如?page=2、?page=3这类)
    Rule(LinkExtractor(allow=r'/questions\?page=\d+'), follow=True),
    # 跟进具体的问题详情链接,并调用parse_item方法解析内容
    Rule(LinkExtractor(allow=r'/questions/\d+/'), callback='parse_item', follow=False),
)

别忘了在FirstSpider类里添加对应的解析方法:

def parse_item(self, response):
    # 这里写你要提取的内容逻辑,比如标题、问题描述
    item = {}
    item['question_title'] = response.css('h1[itemprop="name"] a::text').get()
    item['question_content'] = response.css('div[itemprop="text"] ::text').getall()
    return item

2. 起始页面可能被反爬拦截

Stack Overflow会对爬虫请求做检测,如果你的请求没有模拟浏览器标识,可能会返回403禁止访问,导致爬虫拿不到页面内容。你可以先开启DEBUG日志看看请求状态:

scrapy crawl first --loglevel=DEBUG

如果日志里显示起始URL的响应状态是403,就去项目的settings.py里添加浏览器UA:

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

3. 别犯CrawlSpider的低级错误

CrawlSpider有个特殊要求:不能自定义parse方法!因为它的默认parse方法已经用来处理rules的调度逻辑了,如果你自己写了parse函数,会直接覆盖掉默认行为,导致爬虫完全不按规则走。所以检查一下你的代码里有没有额外的parse方法,有的话赶紧删掉。

4. 检查allowed_domains是否正确

你的allowed_domains = ['stackoverflow.com']是没问题的,但如果后续跳转的链接属于子域名(比如xxx.stackoverflow.com),就需要把这些子域名也加进去,但Stack Overflow的问题页面都是主域名下的,这个问题可能性不大,但可以留个心眼。

按照上面的步骤调整后,再重新运行scrapy crawl first,应该就能正常爬取页面了!

内容的提问来源于stack exchange,提问作者Sam B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:44:06