извлечь текст из селектора div с помощью Scrapy - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь получить тексты цен в Potterybarn в скорлупе.Я использовал scrapy shell "https://www.potterybarnkids.com/shop/easter/easter-shop-all-baskets/", а затем пытался получить цену внутри диапазона class="price-state price-sale" Есть ли способ извлечь весь текст внутри диапазона с указанием каждого диапазона внутри него?

Я пытался

response.xpath('//span[@class="price-state price-sale"]/text()').extract() также response.xpath('//span[@class="price-state price-sale"]//text()')[0].extract()

Мне нужен способ извлечь все тексты внутри селектора, если он имеет внутренние промежутки, деления, ...

Я проверил Как я могу извлечь только текств селекторе scrapy в python , а также Scrapy, извлекающем текст из div , в этом ответе предполагается, что он будет содержать только дочерние объекты span, которые будут работать в этом и этом примере.но есть ли более общий способ правильно извлечь весь текст внутри детей, потому что //text() не работает.

1 Ответ

0 голосов
/ 18 мая 2019

Я думаю, что есть более эффективные способы, но следующий xpath делает свою работу.string() на xpath собирает текст со всех дочерних узлов.

Вы можете найти больше информации о различиях между string() и text() в этом сообщении Разница между text () и string ()

prices = [
    r.xpath('string(.)').extract_first() 
    for r in response.xpath('//span[@class="price-state price-sale"]')
]

Как выможно увидеть по результатам, один продукт на строкуЕго можно очистить, например, с помощью replace, или цены, извлеченные с использованием regex

>>> prices
['\n\nSale\n\n\n$5.99\n–\n\n$18.99\n', '\n\nSale\n\n\n$6...

Другой вариант - сделать это в два этапа, используя text() вместо string() и очистить данные.до операции join:

>>> prices = []
>>> for r in response.xpath('//span[@class="price-state price-sale"]'):
>>>     price = [p.strip() for p in r.xpath('.//text()').extract() if p.strip()]
>>>     prices.append(' '.join(price))

Результаты в этом случае уже очищены

>>> prices
['Sale $ 5.99 – $ 18.99', 'Sale $ 6.99 – $ 18.99', 'Sale $ 6.99...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...