关于解决Unhandled error in Deferred或提示NameError: name 'xxPipeline' is not defined

博客主要解决Scrapy爬虫中Unhandled error in Deferred或NameError: name 'xxPipeline' is not defined的问题。经排查,是pipelines.py文件中ImagesPipeline的定义问题,解决方案是将class TutuPipeline(ImagesPipeline) 中的ImagesPipeline换成object。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

解决Unhandled error in Deferred或提示NameError: name 'xxPipeline' is not defined,错误描述如下:

[root@Uu tutu]# scrapy crawl tutu
2018-08-26 18:18:12 [scrapy.utils.log] INFO: Scrapy 1.5.1 started (bot: tutu)
2018-08-26 18:18:12 [scrapy.utils.log] INFO: Versions: lxml 3.2.1.0, libxml2 2.9.1, cssselect 1.0.3, parsel 1.5.0, w3lib 1.19.0, Twisted 18.7.0, Python 2.7.5 (default, Jul 13 2018, 13:06:57) - [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)], pyOpenSSL 18.0.0 (OpenSSL 1.1.0i  14 Aug 2018), cryptography 2.3.1, Platform Linux-3.10.0-693.el7.x86_64-x86_64-with-centos-7.4.1708-Core
2018-08-26 18:18:12 [scrapy.crawler] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'tutu.spiders', 'CONCURRENT_REQUESTS': 1, 'SPIDER_MODULES': ['tutu.spiders'], 'BOT_NAME': 'tutu', 'COOKIES_ENABLED': False, 'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)', 'DOWNLOAD_DELAY': 5}
2018-08-26 18:18:12 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
 'scrapy.extensions.logstats.LogStats',
 'scrapy.extensions.telnet.TelnetConsole',
 'scrapy.extensions.corestats.CoreStats']
2018-08-26 18:18:13 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
 'scrapy.downloadermiddlewares.retry.RetryMiddleware',
 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
 'scrapy.downloadermiddlewares.stats.DownloaderStats']
2018-08-26 18:18:13 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
 'scrapy.spidermiddlewares.referer.RefererMiddleware',
 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
 'scrapy.spidermiddlewares.depth.DepthMiddleware']
Unhandled error in Deferred:
2018-08-26 18:18:13 [twisted] CRITICAL: Unhandled error in Deferred:

2018-08-26 18:18:13 [twisted] CRITICAL: 
Traceback (most recent call last):
  File "/usr/lib64/python2.7/site-packages/twisted/internet/defer.py", line 1418, in _inlineCallbacks
    result = g.send(result)
  File "/usr/lib64/python2.7/site-packages/scrapy/crawler.py", line 98, in crawl
    six.reraise(*exc_info)
  File "/usr/lib64/python2.7/site-packages/scrapy/crawler.py", line 80, in crawl
    self.engine = self._create_engine()
  File "/usr/lib64/python2.7/site-packages/scrapy/crawler.py", line 105, in _create_engine
    return ExecutionEngine(self, lambda _: self.stop())
  File "/usr/lib64/python2.7/site-packages/scrapy/core/engine.py", line 70, in __init__
    self.scraper = Scraper(crawler)
  File "/usr/lib64/python2.7/site-packages/scrapy/core/scraper.py", line 71, in __init__
    self.itemproc = itemproc_cls.from_crawler(crawler)
  File "/usr/lib64/python2.7/site-packages/scrapy/middleware.py", line 58, in from_crawler
    return cls.from_settings(crawler.settings, crawler)
  File "/usr/lib64/python2.7/site-packages/scrapy/middleware.py", line 34, in from_settings
    mwcls = load_object(clspath)
  File "/usr/lib64/python2.7/site-packages/scrapy/utils/misc.py", line 44, in load_object
    mod = import_module(module)
  File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/BS/scrapy/tutu/tutu/pipelines.py", line 9, in <module>
    class TutuPipeline(ImagesPipeline):
NameError: name 'ImagesPipeline' is not defined

解决过程:

 根据错误信息提示,发现是pipelines.py文件中的ImagesPipeline的定义问题,

后经反复实验,发现将class TutuPipeline(ImagesPipeline) 中的类换成object即不报错,

所以,解决方案为:将class TutuPipeline(ImagesPipeline) 中的类ImagesPipeline换成object即可。

 

PS D:\conda_Test\baidu_spider\baidu_spider> scrapy crawl baidu -o realtime.csv 2025-06-26 20:37:39 [scrapy.utils.log] INFO: Scrapy 2.11.1 started (bot: baidu_spider) 2025-06-26 20:37:39 [scrapy.utils.log] INFO: Versions: lxml 5.2.1.0, libxml2 2.13.1, cssselect 1.2.0, parsel 1.8.1, w3lib 2.1.2, Twisted 23.10.0, Python 3.12.7 | packaged by Anaconda, Inc. | (main, Oct 4 2024, 13:17:27) [MSC v.1929 64 bit (AMD64)], pyOpenSSL 24.2.1 (OpenSSL 3.0.16 11 Feb 2025), cryptography 43.0.0, Platform Windows-11-10.0.22631-SP0 2025-06-26 20:37:39 [scrapy.addons] INFO: Enabled addons: [] 2025-06-26 20:37:39 [asyncio] DEBUG: Using selector: SelectSelector 2025-06-26 20:37:39 [scrapy.utils.log] DEBUG: Using reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor 2025-06-26 20:37:39 [scrapy.utils.log] DEBUG: Using asyncio event loop: asyncio.windows_events._WindowsSelectorEventLoop 2025-06-26 20:37:39 [scrapy.extensions.telnet] INFO: Telnet Password: 40e94de686f0a93d 2025-06-26 20:37:39 [scrapy.middleware] INFO: Enabled extensions: ['scrapy.extensions.corestats.CoreStats', 'scrapy.extensions.telnet.TelnetConsole', 'scrapy.extensions.feedexport.FeedExporter', 'scrapy.extensions.logstats.LogStats'] 2025-06-26 20:37:39 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'baidu_spider', 'FEED_EXPORT_ENCODING': 'utf-8', 'NEWSPIDER_MODULE': 'baidu_spider.spiders', 'REQUEST_FINGERPRINTER_IMPLEMENTATION': '2.7', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['baidu_spider.spiders'], 'TWISTED_REACTOR': 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'} 2025-06-26 20:37:40 [scrapy.middleware] INFO: Enabled downloader middlewares: ['scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware', 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware', 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware', 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware', 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware', 'scrapy.downloadermiddlewares.retry.RetryMiddleware', 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware', 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware', 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware', 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware', 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware', 'scrapy.downloadermiddlewares.stats.DownloaderStats'] 2025-06-26 20:37:40 [scrapy.middleware] INFO: Enabled spider middlewares: ['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware', 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware', 'scrapy.spidermiddlewares.referer.RefererMiddleware', 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware', 'scrapy.spidermiddlewares.depth.DepthMiddleware'] 2025-06-26 20:37:40 [scrapy.middleware] INFO: Enabled item pipelines: ['baidu_spider.pipelines.BaiduSpiderPrintPipeline', 'baidu_spider.pipelines.BaiduSpiderPipeline'] 2025-06-26 20:37:40 [scrapy.core.engine] INFO: Spider opened 2025-06-26 20:37:40 [scrapy.core.engine] INFO: Closing spider (shutdown) 2025-06-26 20:37:40 [baidu] INFO: 执行了close_spider方法,项目已经关闭 2025-06-26 20:37:40 [scrapy.utils.signal] ERROR: Error caught on signal handler: <bound method CoreStats.spider_closed of <scrapy.extensions.corestats.CoreStats object at 0x000001BB483C0470>> Traceback (most recent call last): File "D:\anaconda3\Lib\site-packages\scrapy\crawler.py", line 160, in crawl yield self.engine.open_spider(self.spider, start_requests) NameError: name 'baidu_spider' is not defined During handling of the above exception, another exception occurred: Traceback (most recent call last): File "D:\anaconda3\Lib\site-packages\scrapy\utils\defer.py", line 348, in maybeDeferred_coro result = f(*args, **kw) File "D:\anaconda3\Lib\site-packages\pydispatch\robustapply.py", line 55, in robustApply return receiver(*arguments, **named) File "D:\anaconda3\Lib\site-packages\scrapy\extensions\corestats.py", line 30, in spider_closed elapsed_time = finish_time - self.start_time TypeError: unsupported operand type(s) for -: 'datetime.datetime' and 'NoneType' 2025-06-26 20:37:40 [scrapy.statscollectors] INFO: Dumping Scrapy stats: {'log_count/DEBUG': 3, 'log_count/ERROR': 1, 'log_count/INFO': 9} 2025-06-26 20:37:40 [scrapy.core.engine] INFO: Spider closed (shutdown) Unhandled error in Deferred: 2025-06-26 20:37:40 [twisted] CRITICAL: Unhandled error in Deferred: Traceback (most recent call last): File "D:\anaconda3\Lib\site-packages\twisted\internet\defer.py", line 874, in callback self._startRunCallbacks(result) File "D:\anaconda3\Lib\site-packages\twisted\internet\defer.py", line 981, in _startRunCallbacks self._runCallbacks() File "D:\anaconda3\Lib\site-packages\twisted\internet\defer.py", line 1075, in _runCallbacks current.result = callback( # type: ignore[misc] File "D:\anaconda3\Lib\site-packages\twisted\internet\defer.py", line 1946, in _gotResultInlineCallbacks _inlineCallbacks(r, gen, status, context) --- <exception caught here> --- File "D:\anaconda3\Lib\site-packages\twisted\internet\defer.py", line 2000, in _inlineCallbacks result = context.run(gen.send, result) File "D:\anaconda3\Lib\site-packages\scrapy\crawler.py", line 160, in crawl yield self.engine.open_spider(self.spider, start_requests) builtins.NameError: name 'baidu_spider' is not defined 2025-06-26 20:37:40 [twisted] CRITICAL: Traceback (most recent call last): File "D:\anaconda3\Lib\site-packages\twisted\internet\defer.py", line 2000, in _inlineCallbacks result = context.run(gen.send, result) File "D:\anaconda3\Lib\site-packages\scrapy\crawler.py", line 160, in crawl yield self.engine.open_spider(self.spider, start_requests) NameError: name 'baidu_spider' is not defined PS D:\conda_Test\baidu_spider\baidu_spider> 如何解决
最新发布
06-27
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值