1 回答

TA貢獻1911條經驗 獲得超7個贊
如果您刪除 XPath 上的索引,它們將找到頁面中的所有項目:
response.xpath('//*[@id="content"]/div/div/ul/li/a/h3').extract() # Returns 7 items
但是,您應該注意到這將返回所選 html 元素的字符串列表。如果您想要元素內的文本,您應該添加/text()XPath。(這看起來像你做的)
另外,你只得到一個回報的原因是因為你在將所有項目分配給時將它們連接成一個字符串item:
items['product_name'] = ''.join(title).strip()
這title是一個元素列表,您將它們全部連接在一個字符串中。相同的邏輯適用于其他變量
如果那真的是您想要的,您可以忽略以下內容,但我相信更好的方法是分別執行 for 循環和yield它們?
我的建議是:
def parse(self, response):
products = response.xpath('//*[@id="content"]/div/div/ul/li')
for product in products:
items = ShopItem()
items['product_name'] = product.xpath('a/h3/text()').get()
items['product_sale_price'] = product.xpath('a/span/del/span/text()').get()
items['product_original_price'] = product.xpath('a/span/ins/span/text()').get()
items['product_category'] = product.xpath('a/span/ins/span/text()').get()
yield items
請注意,在您的原始代碼中,您的categoryvar 與您的 具有相同的 XPath product_original_price,我將邏輯保留在代碼中,但這可能是一個錯誤。
添加回答
舉報