У меня проблема с использованием xpath для получения противоречивого прайс-листа
Пример
<td><span="green">$33.99</span></td>
<td>Out of stock</td>
<td><span="green">$27.99</span></td>
<td><span="green">$35.00</span></td>
Как получить цену внутри диапазона и Нет в наличии на в то же время? Потому что я получаю только $ 33,99 или что-нибудь, что имеет span и текст, который не находится внутри span, был пропущен. И это испортило порядок.
Неудачная попытка, которую я использовал с обновлением из решения @ piratefache (Scrapy)
product_prices_tds = response.xpath('//td/')
product_prices = []
for td in product_prices_tds:
if td.xpath('//span'):
product_prices = td.xpath('//span/text()').extract()
else:
product_prices = td.xpath('//text()').extract()
for n in range(len(product_names)):
items['price'] = product_prices[n]
yield items
Не работает, потому что product_prices не получает правильный текст получить со всего места. Не только внутри или снаружи, как я намеревался.
Обновление Для того, кто пришел позже. Я исправил свой код благодаря @ piratefache's. Вот исправленный фрагмент для тех, кто хочет использовать позже.
product_prices_tds = response.xpath('//td')
product_prices = []
for td in product_prices_tds:
if td.xpath('span'):
product_prices.append(td.xpath('span//text()').extract())
else:
product_prices.append(td.xpath('/text()').extract())
for n in range(len(product_names)):
items['price'] = product_prices[n]
yield items