如题,在写爬虫时,碰到这个错误 使用的是 crawlspider 通用爬虫,下面是代码(先调用 parse_a,再调用 parse_b)
name = 'crawl_spider'
allowed_domains = ['baidu.com']
start_urls = ['https://www.baidu.com']
rules = (...)
def parse_a(self,response)
...
yield item # item 定义省略
yield scrapy.Request(url=url,callback=self.parse_b,meta={'item':item})
def parse_b(self,response)
item = response.meta["item"] # 获取 parse_a 传递过来的 item 对象
print(item)
...
运行代码后报错如下:
Traceback (most recent call last):
File "C:\Users\mypc\Anaconda3\lib\site-packages\scrapy\utils\defer.py", line 102, in iter_errback
yield next(it)
File "C:\Users\mypc\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\offsite.py", line 29, in process_spider_output
for x in result:
File "C:\Users\mypc\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\referer.py", line 339, in <genexpr>
return (_set_referer(r) for r in result or ())
File "C:\Users\mypc\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\urllength.py", line 37, in <genexpr>
return (r for r in result or () if _filter(r))
File "C:\Users\mypc\Anaconda3\lib\site-packages\scrapy\spidermiddlewares\depth.py", line 58, in <genexpr>
return (r for r in result or () if _filter(r))
File "C:\Users\mypc\Anaconda3\lib\site-packages\scrapy\spiders\crawl.py", line 78, in _parse_response
for requests_or_item in iterate_spider_output(cb_res):
File "d:\Python_project\2019-08-18\novel\novel\spiders\crawl_spider", line 63, in parse_chapter_detail
item = response.meta["item"] # 获取前面传递过来的 item 对象
KeyError: 'item'
猜测可能是传递 item 哪里没搞对导致的错误
PS:使用 crawlspider 这样传递 item 是否正确?如果不对,应该怎么在不同方法间传递 item 对象?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.