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

Scrapy爬虫报错:'EPollReactor'对象无'_handleSignals'属性求解决

问题解决:Scrapy运行报错'EPollReactor' object has no attribute '_handleSignals'

这个错误是Twisted与Scrapy版本不兼容导致的:EPollReactor是Twisted的IO反应器组件,新版本Twisted可能移除了_handleSignals方法,而当前使用的Scrapy版本未适配该变化。

解决步骤:

  • 先查看当前安装的Twisted和Scrapy版本:
    pip list | grep -E "Twisted|Scrapy"
    
  • 方案一:降级Twisted到兼容版本(比如22.10.0,该版本与多数Scrapy版本适配):
    pip install twisted==22.10.0 --force-reinstall
    
  • 方案二:升级Scrapy到最新稳定版,适配新版本Twisted:
    pip install --upgrade scrapy
    

额外代码优化建议:

你的代码直接在parse方法中修改全局DataFramedf存在线程安全风险(Scrapy是异步框架,多请求同时修改df可能导致数据混乱),建议改用Scrapy的Item Pipeline处理数据存储:

  1. 定义Item类:
    import scrapy
    
    class ContentItem(scrapy.Item):
        index = scrapy.Field()
        content = scrapy.Field()
    
  2. 修改Spider的parse方法:
    def parse(self, response):
        index = response.meta['Index']
        content = ''.join(response.css('p::text').extract())
        yield ContentItem(index=index, content=content)
    
  3. 编写Pipeline保存到DataFrame:
    class DataFramePipeline:
        def open_spider(self, spider):
            self.items = []
    
        def process_item(self, item, spider):
            self.items.append({'Index': item['index'], 'Content': item['content']})
            return item
    
        def close_spider(self, spider):
            global df
            for item in self.items:
                df.loc[item['Index'], 'Content'] = item['content']
    
  4. 在settings.py中启用Pipeline:
    ITEM_PIPELINES = {
        'your_project_name.pipelines.DataFramePipeline': 300,
    }
    

内容的提问来源于stack exchange,提问作者Yến Phan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:04:56