使用Python检索img src属性的xpath语法有问题

时间:2013-11-27 01:35:01

标签: python xpath web-scraping lxml elementtree

我一直在试图找出解析这个html的xpath语法,但是我没有得到与其他人相同的结果。我之后一直在为我的工作建模http://docs.python-guide.org/en/latest/scenarios/scrape/#web-scraping,但我不能让它为我的html工作。

<div id="sku-8103">
    <!-- B:649 -->
    <input type="hidden" id="productIdPDP" value="1218866963585"/>
    <input type="hidden" id="skuIdPDP" value="8240103" />
    <input type="hidden" id="enableLightbox" value="" />
    <!-- B:780 -->
    <img src="http://images.bestbuy.com/BestBuy_US/en_US/images/global/buttons/btn_notorderable_pdp.gif" alt="Not Orderable" border="0" id="notorderable" />
    <input name="8240103" type="hidden" value="1">
    <!-- E:780 -->
    <!-- E:649 -->
    </div>

我的代码:

import pycurl
import sys
import cStringIO
from lxml import etree
from lxml import html

buf = cStringIO.StringIO()

c = pycurl.Curl()
c.setopt(c.URL, 'http://www.bestbuy.com/site/sony-playstation-4-500gb/8240103.p?id=1218866963585&skuId=8240103')
c.setopt(c.WRITEFUNCTION, buf.write)
c.perform()

data = buf.getvalue()
buf.close()

tree = html.fromstring(data)


product = tree.xpath('//div[@id="sku-8240103"]/img[@src]')
print product

输出为:[]而不是图像的src值。我也尝试过:

product = tree.xpath('//div[@id="sku-8240103"]/img[@src]/text()')

但这似乎也没有用。

1 个答案:

答案 0 :(得分:2)

你的HTML有这个:

<div id="sku-8103">

您正在搜索:

product = tree.xpath('//div[@id="sku-8240103"]/img[@src]')

注意不同的SKU编号?没有匹配的节点,因此您返回空列表[]

如果你改变它:

product = tree.xpath('//div[@id="sku-8103"]/img[@src]')

您现在可以获得单个元素列表,如下所示:

[<Element img at 0x10c85b890>]

如果你这样做:

print product[0].attrib['src']

...你明白了:

http://images.bestbuy.com/BestBuy_US/en_US/images/global/buttons/btn_notorderable_pdp.gif

真的,你不需要那里的[@src]部分;如果您尝试将其限制为img具有src属性...您希望看到的其他img是什么?