我一直在试图找出解析这个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()')
但这似乎也没有用。
答案 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
是什么?