Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何使用Scrapy中的Xpath提取文本?_Python 2.7_Xpath_Scrapy_Scrapy Shell - Fatal编程技术网

Python 2.7 如何使用Scrapy中的Xpath提取文本?

Python 2.7 如何使用Scrapy中的Xpath提取文本?,python-2.7,xpath,scrapy,scrapy-shell,Python 2.7,Xpath,Scrapy,Scrapy Shell,好吧,看来我什么都试过了,只是不知道这里发生了什么。直接链接到该网站,我正试图刮是 我想提取标题和价格。我最好的尝试结果只是返回一个空的[] 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" ... >>> respon

好吧,看来我什么都试过了,只是不知道这里发生了什么。直接链接到该网站,我正试图刮是

我想提取标题和价格。我最好的尝试结果只是返回一个空的[]

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 []>
用户Ps MacBook Pro:ammo用户$scrapy shell”http://www.ammofast.com/collections/pistolproducts/aguila-25-auto-acp-full-metal-jacket-50-gr-1000-round-case"
...
>>>xpath('//div[@id=“product header title”]/h1[@id=“product title”]/text()).extract

我试过一把不同的变体,但都没有用。我想我还没有完全理解XPath结构,但这就是我练习的原因:)谢谢你的帮助!我也在使用Scrapy 1.1.0。

价格是使用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”
中实际上没有文本:


您可以解析该函数代码或从选项标签获取价格:

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'>]
[15]中的
:response.xpath(“//*[@id='product-title']]/text()”)
Out[15]:[]
[16]中的response.xpath(“//option/text()”)
Out[16]:[]

好的,现在我想知道这是我的设置问题还是什么?因为我只是复制了你的输入,所有的结果都是[]没有说任何其他内容。如果你看看
响应。body
返回你看到了什么?这就是结果,()我试图用一个网站来美化它,然后把它放在代码共享上,让它看起来更好。这里有相当多的JS,唯一真正的HTML似乎是导航栏、页脚和一些我猜是“模板”类型的东西。如果你试着按ctrl+F键,搜索任何div或h1,它什么也找不到,所以我只知道JS是什么把信息拉进来的?好的,您得到的和源代码的外观不一样,我在标题中看到
未找到页面
,如果您通过右键单击并选择“查看源代码”在浏览器中查看源代码,您将看到的内容不在标题中。你确定你使用的是正确的url吗?哈哈,我复制了链接,而不是你的代码,因为我认为你也这么做了!无论如何,你会对价格有意见,所以一石二鸟:)
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'>]