Python:基于绝对XPath解析HTML元素
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:基于绝对XPath解析HTML元素,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1973字,纯文字阅读大概需要3分钟。
内容图文
![Python:基于绝对XPath解析HTML元素](/upload/InfoBanner/zyjiaocheng/723/4d7b9c41f0bb4a328d5e619f69b9425c.jpg)
我正在开发一个项目,我必须根据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()
内容总结
以上是互联网集市为您收集整理的Python:基于绝对XPath解析HTML元素全部内容,希望文章能够帮你解决Python:基于绝对XPath解析HTML元素所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。