xpath工具(解析)
程序员文章站
2022-05-02 22:46:05
...
- 在XML文档中查找信息的语言,同样适用于HTML文档的检索 xpath辅助工具 chrome插件:Xpath Helper
- 打开/关闭:Ctrl + shift + x
Firefox插件:XPath Checker
XPath编辑工具:XML quire
匹配演示- 查找所有的book节点 : //book
查找所有book节点下的title子节点中,lang属性为"en"的节点
//book/title[@lang=“en”]
-
查找bookstore下的第2个book节点下的title子节点 /bookstore/book[2]/title
-
选取节点 // : 从整个文档中查找节点 //price //book//price @ : 选取某个节点的属性值 //title[@lang=“en”]
-
@的使用
-
选取1类节点 : //title[@lang=“en”]
-
选取存在某个属性节点: //title[@lang]
-
选取节点的属性值: //title/@lang
-
匹配多路径 :|
-
xpath表达式1 | xpath表达式2
-
获取所有book节点下的title子节点和price子节点 //book/title | //book/price
xpath函数
contains():匹配一个属性值中包含某些字符串的节点
//title[contains(@lang,“e”)]
//div[contains(@class,“njjzw”)]
text():获取文本
//title[contains(@lang,"e")]/text()
lxml库及xpath使用
安装 管理员
Prompt : conda install lxmlPrompt : conda install lxml
使用流程
导模块
from lxml import etreefrom lxml import etree
创建解析对象
parseHtml = etree.HTML(html)
调用xpath
rList=parseHtml.xpath(‘xpath表达式’)
## 只要调用了xpath,结果一定是列表 ##
from lxml import etree
html = '''
<div class="wrapper">
<i class="iconfont icon-back" id="back"></i>
<a href="/" id="channel">新浪社会</a>
<ul id="nav">
<li><a href="http://domestic.firefox.sina.com/" title="国内">国内</a></li>
<li><a href="http://world.firefox.sina.com/" title="国际">国际</a></li>
<li><a href="http://mil.firefox.sina.com/" title="军事">军事</a></li>
<li><a href="http://photo.firefox.sina.com/" title="图片">图片</a></li>
<li><a href="http://society.firefox.sina.com/" title="社会">社会</a></li>
<li><a href="http://ent.firefox.sina.com/" title="娱乐">娱乐</a></li>
<li><a href="http://tech.firefox.sina.com/" title="科技">科技</a></li>
<li><a href="http://sports.firefox.sina.com/" title="体育">体育</a></li>
<li><a href="http://finance.firefox.sina.com/" title="财经">财经</a></li>
<li><a href="http://auto.firefox.sina.com/" title="汽车">汽车</a></li>
</ul>
<i class="iconfont icon-liebiao" id="menu"></i>
</div>'''
# 创建解析对象(etree.HTML())
parseHtml = etree.HTML(html)
# 解析对象调用xpath()
# 1. 匹配出所有的 href 的值
r1 = parseHtml.xpath('//a/@href')
#print(r1)
# 2. 把href中的 / 匹配出来
r2 = parseHtml.xpath(
'//div[@class="wrapper"]/a/@href')
#print(r2)
# 3. 把href中的非 / 匹配出来
r3 = parseHtml.xpath(
'//ul[@id="nav"]/li/a/@href')
#print(r3)
# 4. 获取所有a节点的文本内容
r4 = parseHtml.xpath('//a/text()')
#print(r4)
# 5. 获取所有a节点文本内容(不包括最上面的新浪社会)
r5 = parseHtml.xpath(
'//ul[@id="nav"]/li/a')
for s in r5:
print(s.text)
上一篇: 三目运算的嵌套写法