python - Scrapy中分页的KeyError
问题描述
我用 Scrapy 抓取了一个网站,它在没有分页的情况下运行良好。当我使用分页时,我有一个 KeyError。
抓取代码:
class AnnonceSpider(scrapy.Spider):
name = 'rzc_results'
def __init__(self, *args, **kwargs):
data_file = pkgutil.get_data(
"rzc_spider", "json/input/complete_rzc_scrape_rectif.json")
self.data = json.loads(data_file)
def start_requests(self):
for item in self.data:
request = scrapy.Request(item['rzc_url'], callback=self.parse)
request.meta['item'] = item
yield request
def parse(self, response):
item = response.meta['item']
item['results'] = []
for caritem in response.css("div.adCardOuter_d2sn17 > div[itemprop='item']"):
data = AnnonceItem()
#model
data["model"] = []
data["model"] = caritem.css("h2.title_16j3u81 > div::text").extract_first()
if len(data["model"]) == 0:
data["model"] = None
item['results'].append(data)
yield item
next_page = response.css(
'a.link_huvdae-o_O-linkPrevNext_1v3fox8::attr(href)').extract_first()
if next_page is not None:
url_pagination = 'https://www.url.com' + next_page
yield scrapy.Request(url=url_pagination, callback=self.parse)
错误信息:
File "/home/bolgi/anaconda3/envs/spiders/rzc_spider/rzc_spider/spiders/rzc_item.py", line 26, in parse
item = response.meta['item']
KeyError: 'item'
有什么问题,我该如何解决这个问题?
解决方案
在从下一页生成的请求中,您不会传递 meta 中的项目。如果您将最后一个请求更改为以下内容,它应该可以工作:
meta = {'item': response.meta['item']}
yield scrapy.Request(url=url_pagination, callback=self.parse, meta=meta)
推荐阅读
- webrtc - Edge 上的 WebRTC 给出“addRemoteCandidate 超时。考虑发送候选人结束通知”
- azure - LOGGER 在 Microsoft Azure 的 Spring Boot 中不起作用
- sql - Postgres 模式匹配字符串的中间字母
- gridview - 为什么过滤器总是在请求后重置?Yii2,pjax
- php - 是否可以在未加载 openssl 模块的情况下使用诸如 openssl_decrypt 之类的预定义函数?
- windows - Windows 10 Makefile 设置变量问题
- amazon-web-services - 如何在弹性 beantalk 负载均衡器中设置自定义标头相关规则
- django - 将我的 django 项目设置到云服务器后,CSS 消失了
- java - jTextfield 数组之间的操作
- azure-devops - 如何将字符串插入到 Azure 管道中的文件的换行符?