def parse(self, response):
item = AmazonItem()
item['url'] = response.url
item['SellerName'] = response.xpath(".//*[@id='bylineInfo']/text()").extract()[0].strip()
item['itemtitle'] = response.xpath(".//*[@id='productTitle']/text()").extract()[0].strip()
item['rating'] = response.xpath(".//*[@class='a-icon-alt']/text()").extract()[0].strip()
item['price'] = response.xpath(".//*[@class='a-size-medium a-color-price']/text()").extract()[0].strip()
try:
list = response.xpath(".//*[@class='a-unordered-list a-vertical a-spacing-none']/li/span[@class='a-list-item']/text()").extract()
item['desc'] = [s.strip() for s in list]
except IndexError:
item['desc']="No Description"
在上面的代码中,我试图获取价格,标题,评论和说明(如果存在),它为存在说明的链接提取所有内容,但为没有说明的链接不写任何内容,可以提供任何帮助。以下是链接: https://www.amazon.com/Angelkiss-Leather-shoulder-backpack-K15631/dp/B01NCX988Q ---描述 https://www.amazon.com/dp/B06W9HL2L1 ---没有描述
答案 0 :(得分:1)
请确保避免使用复合类。我试图展示如何定义它们。您需要做的就是将下面使用的xapth替换为您在scrapy项目中使用的xapth。
import requests
from scrapy import Selector
url = "https://www.amazon.com/dp/B01NCX988Q/?tag=stackoverflow17-20"
res = requests.get(url,headers={"User-Agent":"Mozilla/5.0"})
sel = Selector(res)
product_url = res.url
seller = sel.xpath("//a[@id='bylineInfo']/text()").extract_first()
title = sel.xpath("//*[@id='productTitle']/text()").extract_first().strip()
rating = sel.xpath("//span[@class='a-icon-alt']/text()").extract_first().strip()
price = sel.xpath("//*[@id='priceblock_ourprice']/text()").extract_first().strip()
desc = [' '.join(item.split()) for item in sel.xpath("//*[@id='feature-bullets']//*[@class='a-list-item']/text()").extract()]
print(f'{product_url}\n{seller}\n{title}\n{rating}\n{price}\n{desc}')
答案 1 :(得分:0)
不要以“。”开头。用于xpath表达式。它是用于现实的xpath表达式。
from operator import methodcaller
if response.css('span.a-list-item::text'):
item['description'] = filter(bool, map(methodcaller('strip'), response.css('span.a-list-item::text').extract()))
else:
item['description'] = 'No Description'
答案 2 :(得分:0)
您没有描述的商品恰好缺货,并且与没有描述的情况完全不同。 根据当前示例,当物品缺货时,这些属性将永远不会出现。 :),因此请先检查产品的可用性,然后再选择其属性。