我正在尝试废弃该网站ketabejam.ir
我正在使用python3.4.1并且为了解析我使用lxml 3.4.1
顺便说一句,我用lxml.html.fromstring方法解析它
当我将文档加载到我的解释器上并请求以下查询来获取页面数时,我可以处理分页:
s = doc.xpath("//*[@id='page']")
令人惊讶的是我得到了结果:
>>>len(s) == 2
True
我从firebug的最小xpath获得了元素的地址,
当我选择正常的xpath时,查询运行顺利
这是一个错误,还是我做错了什么?
答案 0 :(得分:2)
通常可以通过以下方式解决此问题:
s = doc.xpath("(//*[@id='page'])[1]")
...如果你知道你真的只想要匹配的第一个节点,并且可以安全地忽略任何后续节点(在这种情况下这似乎是一个安全的赌注)。
答案 1 :(得分:1)
查看您关联的网页的网页来源,页面中只有两个元素id
。很可能是表格的顶部之一,而另一个是表格的底部。
firebug的副本minimal
xpath版本基于元素的id
工作。它仅适用于具有id
标记的元素,并且它以格式 -
//*[@id="elementID"]
你得到的是什么。
理想情况下,在每个html页面中,应该只有一个具有特定id
的元素,即id
在整个页面中应该是唯一的。似乎firebug
的最小xpath依赖于此。
在您的上下文中,我认为两个元素都返回相同的链接,因此您可以使用其中一个来继续抓取。或者如您所示,您可以使用正常的xpath。