Python:基于绝对XPath解析HTML元素

我正在开发一个项目,我必须根据URL解析20个不同的HTML页面,我想从所有这些页面获取一些信息.页面具有不同的结构,所需信息位于每个站点的不同位置.

我想我可以试试Python lxml模块.由于信息可以在每个站点的不同位置找到,我很懒惰将20 * X不同的注册表放在一起.表达式,我认为对这些元素使用绝对XPath是个好主意.通过这种方式,我可以简单地利用Chrome浏览器的复制XPath功能,并为我的解析器提供每个HTML元素的清晰路径,而且我不需要编写很多代码.

我找不到任何显示我如何在Python中使用绝对XPath引用HTML元素的示例.一些评论说,而不是绝对路径,最好使用相对,但不能真正解释原因.但同样,引用具有相对XPath的元素意味着一些编码再次工作.

只是为了使它更复杂这20个站点是unicode.

有没有办法在Python中引用具有绝对XPath的HTML元素并像这样获取其文本值?

/html/body/div[1]/table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]/div/table/tbody/tr[3]/td[2]/table/tbody/tr[2]/td/table/tbody/tr/td[2]/font/b

…它将返回HTML元素的文本值.

到目前为止,我得到了以下代码,它适用于相对XPath,但当我使用绝对时,它给我下面的错误.

import urllib2
from lxml import html
from bs4 import UnicodeDammit


response = urllib2.urlopen('http://oneofthesites.com')
content = response.read()
doc = UnicodeDammit(content, is_html=True)
parser = html.HTMLParser(encoding=doc.original_encoding)
root = html.document_fromstring(content, parser=parser)
data = root.find('/html/body/div[1]/table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]/div/table/tbody/tr[1]/td[2]/b').text_content()
print(data)

而错误是:

SyntaxError: cannot use absolute path on element

也许我的基本概念是错误的,所以关于如何处理这些页面的任何其他想法都是受欢迎的!

在此先感谢您的帮助,
g0m3z

解决方法:

您正在使用html.document_fromstring();这将返回一个Element,而不是ElementTree对象.绝对路径仅支持后一种类型.

您有两种选择:

>使用html.parse(响应)(注意,不是response.read()的结果);这将返回一个正确的树对象.
>使用相对XPath表达式.只需用.替换/ html;*元素是所有< html>之后的元素.标签,其余是相对于该元素:

data = root.find('./body/div[1]/table/tbody/tr[2]/td[2]/table/tbody/tr/td[2]/div/table/tbody/tr[1]/td[2]/b').text_content()
上一篇:微信小程序 位置定位position详解,相对定位relative,绝对定位absolute相关问题


下一篇:安卓测试【一】android sdk环境变量配置