爬虫工具lxml库的使用和Xpath语法

安装

pip install lxml

Xpath 语法:
Xpath是一门在XML文档中查找信息的语言。XPath可用来在XML文档中对元素和属性遍历。XPath是W3C XSLT标准的主要元素,并且XQuery和XPointer都构建于Xpath表达之上。
具体语法知识参考 w3school

lmxl用法
利用它解析HTML代码:

from lxml import etree
text = '''
<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html">third item</a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a>
     </ul>
 </div>
'''
html = etree.Html(text)
result = etree.tostring(html)
print(result)

结果:
这里写图片描述

文件读取,可以从文件读取内容,我们创建一个hello.html:

<div>
    <ul>
         <li class="item-0"><a href="link1.html">first item</a></li>
         <li class="item-1"><a href="link2.html">second item</a></li>
         <li class="item-inactive"><a href="link3.html"><span class="bold">third item</span></a></li>
         <li class="item-1"><a href="link4.html">fourth item</a></li>
         <li class="item-0"><a href="link5.html">fifth item</a></li>
     </ul>
 </div>

利用parse方法来读取文件

from lxml import etree
html = etree.parse('hello.html')
result = etree.tostring(html,pretty_print = True)
print(result)

XPath 测试:

from lxml import etree
html = etree.parse('/home/wuhan/hello.html')
result = etree.tostring(html, pretty_print = True)
print(result.decode('utf-8'))
print(type(html))
#获取所有的 <li> 标签
result = html.xpath('//li')
print(result)
print(len(result))
print(type(result))
print(type(result[0]))
#获取 <li> 标签的所有 class
result = html.xpath('//li/@class')
print(result)
#获取 <li> 标签下 href 为 link1.html 的 <a> 标签
result = html.xpath("//li/a[@href='link1.html']")
print(result)
#获取 <li> 标签下的所有 <span> 标签
result = html.xpath('//li//span')
print(result)
#获取 <li> 标签下的所有 class,不包括 <li>
result = html.xpath('//li/a//@class')
print(result)
#获取最后一个 <li> 的 <a> 的 href
result = html.xpath('//li[last()]/a/@href')
print(result)
#获取倒数第二个元素的内容
result = html.xpath('//li[last()-1]/a')
print(result[0].text)
#获取 class 为 bold 的标签名
result = html.xpath('//*[@class="bold"]')
print(result[0].tag)

结果如下:

这里写图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值