Python中如何处理Scrapy爬虫框架的报错

019-01-16 16:41:53 [zhipin][scrapy.downloadermiddlewares.retry] DEBUG: Retrying <GET https://www.zhipin.com/gongsi/df71dd0040fd77d21nN-2tS4EQ~~.html> (failed 1 times): User timeout caused connection failure: Getting https://www.zhipin.com/gongsi/df71dd0040fd77d21nN-2tS4EQ~~.html took longer than 180.0 seconds..


Python中如何处理Scrapy爬虫框架的报错

7 回复

重点:User timeout caused connection failure took longer than 180.0 seconds…
浏览器访问下网站是不是挂了。


Scrapy报错处理的核心是理解错误类型和利用框架的调试机制。遇到报错时,我通常这样做:

首先看Traceback,Scrapy的错误信息很详细。如果是Selector解析错误,检查XPath/CSS选择器是否正确,用scrapy shell实时测试:

scrapy shell "https://example.com"
response.xpath('//div[@class="target"]').get()

如果是Item字段错误,检查items.py定义和pipelines.py处理逻辑是否匹配。网络请求错误(如TimeoutConnectionRefused)可以在settings.py调整:

DOWNLOAD_TIMEOUT = 30
RETRY_TIMES = 2
DOWNLOAD_DELAY = 1

对于重复请求,启用去重中间件:

DUPEFILTER_CLASS = 'scrapy.dupefilters.RFPDupeFilter'

最实用的方法是写中间件捕获异常:

class ErrorLoggerMiddleware:
    def process_spider_exception(self, response, exception, spider):
        spider.logger.error(f"Error on {response.url}: {exception}")
        # 这里可以添加邮件通知或写入日志文件
        return None

启用这个中间件:

SPIDER_MIDDLEWARES = {
    'myproject.middlewares.ErrorLoggerMiddleware': 100,
}

try-except包装可能出错的解析代码,但别滥用,Scrapy有自己的异常处理流程。调试时开启详细日志:

import scrapy
scrapy.utils.log.configure_logging(install_root_handler=False)
import logging
logging.basicConfig(level=logging.DEBUG)

总结:善用scrapy shell调试,合理配置中间件。

应该是被识别出是爬虫,然后送上超时大礼包。

没有挂,可以打开

scrapy 报这种的能否重新请求

你要重写爬虫啊,UA 池、IP 代理都搞一下,延时设置下,要是还不行就上 selenium+chromedriver,肯定你能看到的都能爬。

我 scrapy 不用 selenium 效率太低了你说的这些都搞了

回到顶部