代码使用Xpath
2019-05-31 本文已影响0人
hcc_9bf4
代码中使用xpath
from lxml import etree
两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点
- 本地文件
tree=etree.parse(文件名) - 网络文件
tree=etree.HTML(网页字符串)
ret=tree.xpath(路径表达式) ret 是一个列表
例如:ret=tree.xpath('//div[@class="tang"]/ul/li[1]/text()')
找href属性:
ret=tree.xpath('//div[@class="tang"]/ul/li[last()]/a/@href')
ret=tree.xpath('//div[@class="tang"]/ul//a/@href')
逻辑运算本地实例:
ret=tree.xpath('//div[@class="tang"]/ul//li[@class="love" and @name="yang"]/text()')
打印love和name属性的文本
模糊匹配实例:
ret=tree.xpath('//li[contains(@class,"li")]/text()')
打印所有带li的文本
ret=tree.xpath('//li[contains(text(),"爱")]/text()')
打印li标签下所有带‘爱’字文字
ret=tree.xpath('//li[starts-with(@class,"ba")]/text()')
打印属性以ba开头的标签内容
找内容:
ret=tree.xpath('//div[@class="song"]/text()')
获取到不含标签的内容
ret=tree.xpath('//div[@class="song"]//text()')
获取到包含标签的内容
另一种取内容方式:连起来
from lxml import etree
tree=etree.parse('xpath.html')
ret=tree.xpath('//div[@class="song"]')
string=ret[0].xpath('string(.)')
print(string)
print(string.replace('\n','').replace('\t',''))
结果:
火药
指南针
印刷术
造纸术
火药指南针印刷术造纸术
[Finished in 0.2s]
本地xpat.htm代码示例:
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>xpath测试</title>
</head>
<body>
<div class="song">
火药
<b>指南针</b>
<b>印刷术</b>
造纸术
</div>
<div class="tang">
<ul>
<li class="balove">停车坐爱枫林晚,霜叶红于二月花</li>
<li id="hua"> 商女不知亡国恨,隔江犹唱后庭花</li>
<li class="love" name="yang">一骑红尘妃子笑,无人知是荔枝来</li>
<li id="bei">葡萄美酒夜光杯,欲饮批把马上催</li>
<li><a href="http://www.baidu.com/">百度一下</a></li>
</ul>
<ol>
<li class="lucy">寻寻觅觅,冷冷清清,凄凄惨惨器器</li>
<li class="balili">咋暖还寒时候,最难将息</li>
<li class="lilei">怎敌他晚来风急</li>
<li>雁过也,正伤心</li>
<li>爱情三十计</li>
<li>爱就一个字</li>
</ol>
</div>
</body>
</html>