Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 请求相同的解析方法_Python_Web Scraping_Scrapy - Fatal编程技术网

Python 请求相同的解析方法

Python 请求相同的解析方法,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我不明白请求是如何工作的。我不知道为什么scrapy.Request(下一页,callback=self.parse2)不能像我想的那样工作。Pitem是此请求的响应,但我有KeyError:'Pitem'我不知道为什么第一个请求有效,但request2无效 我的代码: spider.py 这确实定义了一个名为item的元变量,但没有定义名为pitem的元变量。因此,当您调用函数parse2并说pitem=response.meta['pitem']时,它无法在请求元数据中找到pitem 一种可

我不明白请求是如何工作的。我不知道为什么
scrapy.Request(下一页,callback=self.parse2)
不能像我想的那样工作。Pitem是此请求的响应,但我有
KeyError:'Pitem'
我不知道为什么第一个
请求
有效,但
request2
无效

我的代码:

spider.py

这确实定义了一个名为
item
的元变量,但没有定义名为
pitem
的元变量。因此,当您调用函数
parse2
并说
pitem=response.meta['pitem']
时,它无法在请求元数据中找到
pitem

一种可能的解决方案是使用
pitem=response.meta.get('pitem')
,如果无法找到
pitem
,它将返回一个
None
值,但这在很大程度上取决于您的用例

...
def parse(self, response):
  ...
  request = scrapy.Request(link, callback=self.parse2)
  request.meta['item'] = item
  yield request
  ...
def parse2(self, response)
   item = response.meta['item']
   pitem = response.meta['pitem']
   ...
   pitem['field'].append(self.whatever)
   if next_page is not None:
       request2 = scrapy.Request(next_page, callback=self.parse2)
       request2.meta['pitem'] = item
       yield request2
   else:
       yield pitem

   self.whatever = []
  request = scrapy.Request(link, callback=self.parse2)
  request.meta['item'] = item
  yield request