Python中使用Scrapy爬虫时遇到报错如何解决?

scrapy.utils.signal][ERROR] Error caught on signal handler: > Traceback (most recent call last): File "/home/www/.local/lib/python3.4/site-packages/twisted/internet/defer.py", line 151, in maybeDeferred result = f(args, **kw) File "/usr/lib/python3.4/site-packages/pydispatch/robustapply.py", line 55, in robustApply return receiver(arguments, **named) File "/home/www/.local/lib/python3.4/site-packages/scrapy/extensions/telnet.py", line 63, in stop_listening self.port.stopListening() AttributeError: 'TelnetConsole' object has no attribute 'port'

这个错误如何处理


Python中使用Scrapy爬虫时遇到报错如何解决?

4 回复

还不如放张截图


问题分析:
Scrapy报错通常源于请求配置、数据解析或环境依赖问题。直接给出通用排查思路和关键代码示例。

核心解决步骤:

  1. 定位错误类型
    查看完整报错信息,重点关注 Traceback 的最后几行(如 KeyErrorSelectorErrorTimeout 等)。

  2. 常见错误与代码修正
    示例1:提取数据时属性错误

    # 错误写法:未判断属性是否存在
    def parse(self, response):
        yield {
            'title': response.css('h1::attr(id)').get()  # 可能返回None
        }
    
    # 修正:添加默认值或条件判断
    def parse(self, response):
        yield {
            'title': response.css('h1::attr(id)').get() or 'No Title',
            # 或使用条件判断
            'title': response.css('h1::attr(id)').extract_first() if response.css('h1') else None
        }
    

    示例2:请求超时/重试配置

    # 在settings.py中调整
    DOWNLOAD_TIMEOUT = 30
    RETRY_TIMES = 2
    RETRY_HTTP_CODES = [500, 502, 503]
    
    # 或在Request中单独设置
    yield scrapy.Request(
        url, 
        callback=self.parse,
        meta={'download_timeout': 10},
        errback=self.error_handler  # 错误回调
    )
    

    示例3:处理动态页面(需中间件)

    # 安装scrapy-splash后,在spider中:
    yield scrapy.Request(
        url,
        self.parse,
        meta={'splash': {'args': {'wait': 2.0}}}
    )
    
  3. 启用详细日志
    运行爬虫时添加参数获取详细信息:

    scrapy crawl spider_name -L INFO
    

一句话建议: 先看错误类型,再针对性调整请求或解析逻辑。

谷歌一下

你 import 的 TelnetConsole 这个没有 port 方法或者属性

回到顶部