如何在Scrapy中使用Xpath提取文本?

时间:2016-06-02 18:37:39

标签: python-2.7 xpath scrapy scrapy-shell

好吧,好像我已经尝试了一切而且无法弄清楚这里发生了什么。我试图抓取的网站的直接链接是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 个答案:

答案 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'>]