使用Python检索img src属性时遇到xpath语法问题
我一直在试图找出解析这个html的xpath语法,但我没有得到与其他人相同的结果。之后我一直在为我的工作建模,但我无法让它为我的html工作使用Python检索img src属性时遇到xpath语法问题,python,xpath,web-scraping,lxml,elementtree,Python,Xpath,Web Scraping,Lxml,Elementtree,我一直在试图找出解析这个html的xpath语法,但我没有得到与其他人相同的结果。之后我一直在为我的工作建模,但我无法让它为我的html工作 <div id="sku-8103"> <!-- B:649 --> <input type="hidden" id="productIdPDP" value="1218866963585"/> <input type="hidden" id="skuIdPDP" value="824010
<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>
输出为:[]
而不是图像的src
值。我还尝试:
product = tree.xpath('//div[@id="sku-8240103"]/img[@src]/text()')
但这似乎也不起作用。您的HTML包含以下内容:
<div id="sku-8103">
注意到不同的SKU编号了吗?没有匹配的节点,因此返回空列表,[]
如果您这样更改它:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
现在,您将获得一个元素列表,如下所示:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
…你会发现:
http://images.bestbuy.com/BestBuy_US/en_US/images/global/buttons/btn_notorderable_pdp.gif
实际上,您不需要那里的[@src]
部分;如果您试图将其限制为具有src
属性的img
s…您还希望看到哪些img
s?您的HTML具有以下特性:
<div id="sku-8103">
注意到不同的SKU编号了吗?没有匹配的节点,因此返回空列表,[]
如果您这样更改它:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
现在,您将获得一个元素列表,如下所示:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
…你会发现:
http://images.bestbuy.com/BestBuy_US/en_US/images/global/buttons/btn_notorderable_pdp.gif
实际上,您不需要那里的[@src]
部分;如果您试图将其限制为具有src
属性的img
s…您还希望看到哪些img
s?您的HTML具有以下特性:
<div id="sku-8103">
注意到不同的SKU编号了吗?没有匹配的节点,因此返回空列表,[]
如果您这样更改它:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
现在,您将获得一个元素列表,如下所示:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
…你会发现:
http://images.bestbuy.com/BestBuy_US/en_US/images/global/buttons/btn_notorderable_pdp.gif
实际上,您不需要那里的[@src]
部分;如果您试图将其限制为具有src
属性的img
s…您还希望看到哪些img
s?您的HTML具有以下特性:
<div id="sku-8103">
注意到不同的SKU编号了吗?没有匹配的节点,因此返回空列表,[]
如果您这样更改它:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
现在,您将获得一个元素列表,如下所示:
product = tree.xpath('//div[@id="sku-8103"]/img[@src]')
[<Element img at 0x10c85b890>]
…你会发现:
http://images.bestbuy.com/BestBuy_US/en_US/images/global/buttons/btn_notorderable_pdp.gif
实际上,您不需要那里的
[@src]
部分;如果您试图将其限制为具有src
属性的img
s…您还希望看到什么img
s?好的捕获。。。但那只是我文章的一个输入错误。但是,看起来打印(产品[0].attrib['src'])确实有效,而不仅仅是打印产品。你知道为什么印刷品不起作用吗?这不只是一个列表吗?@user1152532:它确实有用。你看到了吗?这是我从运行代码的最后三行复制和粘贴的输出,SKU已固定,与您的数据相对应。这是一个列表,其中有一个img元素
对象。@user1152532:如果您要返回一个空列表,您必须有其他打字错误。要么是这样,要么是你从真实页面复制HTML时把它搞砸了。对。。。我想我很好奇为什么打印产品
没有生成元素对象的全部内容。我习惯于使用JSON,当我打印整个对象时,子对象也会打印出来。@user1152532:同时,当你解析JSON字符串时,你不会得到“JSON对象树”或任何东西;你只需要得到一个Pythondict
的Pythondict
s和list
s和str
s等等。这是因为JSON专门设计为只保存所有脚本语言通用的简单类型。对于HTML或XML来说,这是不正确的。好主意。。。但那只是我文章的一个输入错误。但是,看起来打印(产品[0].attrib['src'])确实有效,而不仅仅是打印产品。你知道为什么印刷品不起作用吗?这不只是一个列表吗?@user1152532:它确实有用。你看到了吗?这是我从运行代码的最后三行复制和粘贴的输出,SKU已固定,与您的数据相对应。这是一个列表,其中有一个img元素
对象。@user1152532:如果您要返回一个空列表,您必须有其他打字错误。要么是这样,要么是你从真实页面复制HTML时把它搞砸了。对。。。我想我很好奇为什么打印产品
没有生成元素对象的全部内容。我习惯于使用JSON,当我打印整个对象时,子对象也会打印出来。@user1152532:同时,当你解析JSON字符串时,你不会得到“JSON对象树”或任何东西;你只需要得到一个Pythondict
的Pythondict
s和list
s和str
s等等。这是因为JSON专门设计为只保存所有脚本语言通用的简单类型。对于HTML或XML来说,这是不正确的。好主意。。。但那只是我文章的一个输入错误。但是,看起来打印(产品[0].attrib['src'])确实有效,而不仅仅是打印产品。你知道为什么印刷品不起作用吗?这不只是一个列表吗?@user1152532:它确实有用。你看到了吗?这是我从运行代码的最后三行复制和粘贴的输出,SKU已固定,与您的数据相对应。这是一个列表,其中有一个img元素
对象。@user1152532:如果您要返回一个空列表,您必须有其他打字错误。要么是这样,要么是你从真实页面复制HTML时把它搞砸了。对。。。我想我很好奇为什么打印产品
没有生成元素对象的全部内容。我习惯于使用JSON,当我打印整个对象时,子对象也会打印出来。@user1152532:同时,当你解析JSON字符串时,你不会得到“JSON对象树”或任何东西;你只需要得到一个Pythondict
的Pythondict
s和list
s和str
s等等。这是因为JSON专门设计用于