我正在做一个项目,我必须根据 URL 解析 20 个不同的 HTML 页面,我想从所有这些页面中获取一些信息。页面具有不同的结构,所需的信息位于每个站点的不同位置。
我想我可以试试 Python lxml 模块。由于可以在每个站点的不同位置找到信息,我很懒惰将 20 * X 不同的 reg 放在一起。表达式,我认为对这些元素使用绝对 XPath 是个好主意。通过这种方式,我可以简单地利用 Chrome 浏览器的 Copy 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