X путь не может извлечь элемент, необходимый в пауке - PullRequest
0 голосов
/ 24 декабря 2018
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 --- без описания

Ответы [ 3 ]

0 голосов
/ 24 декабря 2018

Обязательно избегайте использования составных классов.Я пытался показать, как они должны быть определены.Все, что вам нужно сделать, это заменить использованные ниже xapths на тот, который вы использовали в своем проекте scrapy.

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}')
0 голосов
/ 26 декабря 2018

Товар, который вы дали без описания, отсутствует на складе и совершенно отличается от сценария отсутствия описания.И следуя текущим примерам, которые вы приводите, когда товара нет в наличии, эти атрибуты никогда не появляются:) поэтому сначала проверьте наличие товара, затем перейдите к его атрибутам.

0 голосов
/ 24 декабря 2018

Не начинайте с "."для выражений 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...