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定義的。即便如此,這仍然會導致第二種解析方法出現問題,因為它接收到一個項目并再次迭代。也許你需要使用列表。
添加回答
舉報