Xpath, чтобы получить цены на Amazon

Здесь сначала URL:

http://www.amazon.in/gp/product/B00EYCBFDQ/ref=s9_pop_gw_g147_i3?pf_rd_m=A1VBAL9TL5WCBF&pf_rd_s=center-3&pf_rd_r=1YP3T548XBFHJ1RA3EH8&pf_rd_t=101&pf_rd_p=402518447&pf_rd_i=1320006031

Выше ссылка на какую-то страницу продукта на www.amazon.in.I хочу получить фактическую цену, которая составляет Rs.4,094. Ниже приведен код python, который пытается напечатать цену, и я использовал //span[@id="actualPriceValue"]/text() чтобы получить цену, но возвращает пустой список. Кто-нибудь может предложить, как получить цену?

from lxml import html
import requests

page = requests.get('http://www.amazon.in/gp/product/B00EYCBFDQ/ref=s9_pop_gw_g147_i3?pf_rd_m=A1VBAL9TL5WCBF&pf_rd_s=center-3&pf_rd_r=1YP3T548XBFHJ1RA3EH8&pf_rd_t=101&pf_rd_p=402518447&pf_rd_i=1320006031')
tree = html.fromstring(page.text)
price = tree.xpath('//span[@id="actualPriceValue"]/text()')

print price
2 ответа

Используйте следующий XPath:

price = tree.xpath("//*[@id='actualPriceValue']/b/span/text()")[0]

Следующий код проверяется:

from lxml import html
import requests

page = requests.get('http://www.amazon.in/gp/product/B00EYCBFDQ/ref=s9_pop_gw_g147_i3?pf_rd_m=A1VBAL9TL5WCBF&pf_rd_s=center-3&pf_rd_r=1YP3T548XBFHJ1RA3EH8&pf_rd_t=101&pf_rd_p=402518447&pf_rd_i=1320006031')
tree = html.fromstring(page.text)
price = tree.xpath("//*[@id='actualPriceValue']/b/span/text()")[0]

print price

Результат:

4,094.00
[Finished in 3.0s]

Сообщите нам, если это поможет.


Я думаю, что проблема заключается в том, что span с id actualPriceValue не имеет прямого текста. Вы захотите сделать что-то подобное (я вытаскиваю его из головы, поэтому вам, возможно, придется его изменить):

Изменение: Исправлено. Ниже объяснения все еще точны.

//*[@id='actualPriceValue']/b/span/text()

Вы заметите, что HTML выглядит так:

<span id="actualPriceValue">
 <b>
 <span>
 <span>  </span>
 <span>Rs. </span>
 4,112.00
 </span>
 </b>
</span>

Вы заметите, что это должно быть:

Span with an id of actualPriceValue -> first b element -> first span element -> text

licensed under cc by-sa 3.0 with attribution.