1 回答
TA贡献1824条经验 获得超8个赞
我可以发现您的代码存在一些问题,包括您在评论中提到的错误原因,但问题仍然存在,因为我不完全理解您想要抓取的数据结构。
在您的parse方法中,您实例化了varDonedealItem()中的一个对象items。然后您尝试将其作为回调参数 (cb_kwargs) 发送给回调函数 ( parse_item_page)。
...
yield response.follow(url=link,
callback=self.parse_item_page,
cb_kwargs={link: items})
def parse_item_page(self, response, link):
...
这里的问题是,这link是一个具有不可预测值的变量(因为您将其设置为 url),它需要是一个与您在回调函数中定义的值相同的字符串。所以这应该可以解决错误:
yield response.follow(url=link,
callback=self.parse_item_page,
cb_kwargs={'link': items})
但是,您的parse_item_page方法没有link任何用途。相反,它实例化一个新的DonedealItem(),用解析到这个方法中的数据填充它,然后产生它。作为参数接收的数据link未被使用。如果你想增加你第一个方法发送给你的数据parse,你需要使用它:
def parse_item_page(self, response, link):
items = link # Your link param already receives an DonedealItem instance.
这是一个提示:不需要这些花括号:
yield{
items
}
改用yield items_
仍然存在的问题:
你可以把你想象DonedealItem成一个字典,你的代码正在做的是首先实例化项目,然后运行一个 for 循环,并在这个循环的每次迭代中覆盖你的项目中的数据。我相信你应该在 for 循环中实例化你的项目,但我不能确定,因为我不知道预期的结果是什么,也不知道是如何DonedealItem定义的。即便如此,这仍然会导致第二种解析方法出现问题,因为它接收到一个项目并再次迭代。也许你需要使用列表。
添加回答
举报
