Python id/*[@id=";page";]上的xpath查询返回两个元素
我正试图废弃这个网站 我使用的是python3.4.1,对于解析,我使用lxml3.4.1Python id/*[@id=";page";]上的xpath查询返回两个元素,python,html,xpath,web-scraping,lxml,Python,Html,Xpath,Web Scraping,Lxml,我正试图废弃这个网站 我使用的是python3.4.1,对于解析,我使用lxml3.4.1 顺便说一下,我用lxml.html.fromstring方法解析了它 当我将文档加载到我的解释器上并请求以下查询以获得页数时,我可以处理分页: s = doc.xpath("//*[@id='page']") 令人惊讶的是,我得到了这样的结果: >>>len(s) == 2 True 我从firebug的最小xpath中得到了元素的地址, 当我选择普通xpath时,查询运行平稳
顺便说一下,我用lxml.html.fromstring方法解析了它
当我将文档加载到我的解释器上并请求以下查询以获得页数时,我可以处理分页:
s = doc.xpath("//*[@id='page']")
令人惊讶的是,我得到了这样的结果:
>>>len(s) == 2
True
我从firebug的最小xpath中得到了元素的地址,
当我选择普通xpath时,查询运行平稳
这是一个bug,还是我做错了什么???查看您链接的页面的页面源代码,页面中正好有两个元素具有
id
。最有可能的一个在桌子顶部,另一个在桌子底部
firebug的副本minimal
xpath版本基于元素的id
工作。它仅适用于具有id
标记的元素,并且它以-
//*[@id="elementID"]
这就是你得到的
理想情况下,在每个html页面中,只有一个元素具有特定的id
,即id
在整个页面中应该是唯一的。似乎firebug的最小xpath依赖于此
在您的上下文中,我认为这两个元素都返回相同的链接,因此您可以使用其中一个继续抓取。或者,正如您所指出的,您可以使用普通的xpath来实现这一点。查看您链接的页面的页面源代码,页面中正好有两个id为
的元素。最有可能的一个在桌子顶部,另一个在桌子底部
firebug的副本minimal
xpath版本基于元素的id
工作。它仅适用于具有id
标记的元素,并且它以-
//*[@id="elementID"]
这就是你得到的
理想情况下,在每个html页面中,只有一个元素具有特定的id
,即id
在整个页面中应该是唯一的。似乎firebug的最小xpath依赖于此
在您的上下文中,我认为这两个元素都返回相同的链接,因此您可以使用其中一个继续抓取。或者,正如您所指出的,您可以使用普通的xpath来实现这一点。查看您链接的页面的页面源代码,页面中正好有两个id为的元素。最有可能的一个在桌子顶部,另一个在桌子底部
firebug的副本minimal
xpath版本基于元素的id
工作。它仅适用于具有id
标记的元素,并且它以-
//*[@id="elementID"]
这就是你得到的
理想情况下,在每个html页面中,只有一个元素具有特定的id
,即id
在整个页面中应该是唯一的。似乎firebug的最小xpath依赖于此
在您的上下文中,我认为这两个元素都返回相同的链接,因此您可以使用其中一个继续抓取。或者,正如您所指出的,您可以使用普通的xpath来实现这一点。查看您链接的页面的页面源代码,页面中正好有两个id为的元素。最有可能的一个在桌子顶部,另一个在桌子底部
firebug的副本minimal
xpath版本基于元素的id
工作。它仅适用于具有id
标记的元素,并且它以-
//*[@id="elementID"]
这就是你得到的
理想情况下,在每个html页面中,只有一个元素具有特定的id
,即id
在整个页面中应该是唯一的。似乎firebug的最小xpath依赖于此
在您的上下文中,我认为这两个元素都返回相同的链接,因此您可以使用其中一个继续抓取。或者,正如您所指出的,您可以使用普通的xpath来实现这一点。您通常可以通过执行以下操作来解决此问题:
s = doc.xpath("(//*[@id='page'])[1]")
…如果您知道您真的只需要匹配的第一个节点,并且可以安全地忽略任何后续节点(在本例中,这似乎是一个安全的赌注)。您通常可以通过执行以下操作来解决此问题:
s = doc.xpath("(//*[@id='page'])[1]")
…如果您知道您真的只需要匹配的第一个节点,并且可以安全地忽略任何后续节点(在本例中,这似乎是一个安全的赌注)。您通常可以通过执行以下操作来解决此问题:
s = doc.xpath("(//*[@id='page'])[1]")
…如果您知道您真的只需要匹配的第一个节点,并且可以安全地忽略任何后续节点(在本例中,这似乎是一个安全的赌注)。您通常可以通过执行以下操作来解决此问题:
s = doc.xpath("(//*[@id='page'])[1]")
…如果您知道您确实只需要匹配的第一个节点,并且可以安全地忽略任何后续节点(在本例中,这似乎是一个安全的赌注)