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

Scrapy爬虫无法爬取目标URL但Scrapy Shell成功,爬Craigslist遇连接丢失错误

解决Scrapy爬取Craigslist时的ConnectionLost错误

这个ConnectionLost错误我在爬取Craigslist时遇到过好几次,基本都是反爬机制拦截或者请求配置太“生硬”导致的。给你几个针对性的解决思路:

1. 伪装请求头,模拟真实浏览器

Craigslist会严格检查请求的User-Agent,Scrapy默认的UA很容易被识别。你可以在settings.py里配置完整的请求头:

DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

选一个主流浏览器的UA,别用Scrapy自带的Scrapy/2.x.x (+https://scrapy.org)。

2. 放慢请求速度,避免触发频率限制

频繁的请求会被Craigslist直接断开连接。在settings.py里添加延迟和自动限速配置:

# 基础请求延迟(秒)
DOWNLOAD_DELAY = 3
# 开启自动限速,根据响应速度调整请求间隔
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 2
AUTOTHROTTLE_MAX_DELAY = 5

别贪快,Craigslist对爬虫的容忍度很低,3-5秒的间隔比较稳妥。

3. 使用代理IP规避IP封禁

如果你的IP已经被Craigslist标记,换代理是最直接的办法。可以在Spider的请求里添加代理:

def start_requests(self):
    url = 'https://tampa.craigslist.org/search/jjj?query=bookkeeper'
    yield scrapy.Request(
        url,
        meta={'proxy': 'http://your-proxy-ip:port'},
        callback=self.parse
    )

也可以在settings.py里配置全局代理中间件,批量使用代理池。

4. 调整连接超时和TCP配置

有时候连接丢失是因为超时时间太短,或者TCP连接没有保持。在settings.py里添加:

# 延长下载超时时间
DOWNLOAD_TIMEOUT = 15
# 开启TCP保活,避免连接被主动断开
TCP_KEEPALIVE_ENABLED = True

5. 先手动验证请求是否正常

用curl命令测试目标URL,看看能不能正常返回内容:

curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" https://tampa.craigslist.org/search/jjj?query=bookkeeper

如果curl都拿不到内容,那可能是地区限制或者Craigslist临时屏蔽了这个搜索词;如果curl正常,那就是你的Scrapy配置有问题。

试试这些方法,我之前爬Craigslist的时候,加了请求头和延迟就解决了类似的连接丢失问题。要是还不行,再考虑升级代理池或者添加Cookie模拟登录(不过Craigslist一般不需要登录就能爬搜索页)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:09:47