Как извлечь текст с помощью Xpath в Scrapy?
Хорошо, похоже, что я все перепробовал и просто не могу понять, что здесь происходит. Прямая ссылка на сайт, который я пытаюсь почистить, находится по http://www.ammofast.com/collections/pistol/products/aguila-25-auto-acp-full-metal-jacket-50-gr-1000-round-case
И я хочу извлечь название и цену. Мои лучшие попытки в конечном итоге вернуть пустое []
User-Ps-MacBook-Pro:ammo user$ scrapy shell "http://www.ammofast.com/collections/pistolproducts/aguila-25-auto-acp-full-metal-jacket-50-gr-1000-round-case"
...
>>> response.xpath('//div[@id="product-header-title"]/h1[@id="product-title"]/text()').extract
<bound method SelectorList.extract of []>
Я попробовал несколько вариантов, но все безрезультатно. Думаю, я пока не совсем понимаю структуру XPath, но именно поэтому я тренируюсь:) Спасибо за помощь! Я тоже на Scrapy 1.1.0.
1 ответ
Цена загружается с использованием Javascript, в источнике вы можете увидеть:
window.ShopifyAnalytics.lib.track(
"Viewed Product",
{"id":705964349,"name":"Aguila .25 Auto ACP Full Metal Jacket 50 Gr 1000 Round Case - 1000 \/ 50","price":"329.99","currency":"USD","sku":"","brand":"Aguila","category":".25 ACP","nonInteraction":true}
);
});
Вы можете увидеть, если вы посмотрите на возвращенный источник, что на самом деле нет текста в p class="price"
:
<div id="purchase">
<p class="price"></p>
<input class="btn" type="submit" name="add" id="add-to-cart" value="Add to Cart" />
</div>
</div><!-- /.options -->
Что вы можете сделать, это проанализировать этот код функции или получить цену из тега опции:
In [15]: response.xpath("//*[@id='product-title']/text()")
Out[15]: [<Selector xpath="//*[@id='product-title']/text()" data=u'Aguila .25 Auto ACP Full Metal Jacket 50'>]
In [16]: response.xpath("//option/text()")
Out[16]: [<Selector xpath="//*[@id='product-select']/option/text()" data=u'1000 / 50 - $329.99'>]