没有合适的资源?快使用搜索试试~ 我知道了~
python3解析库lxml的安装与基本使用
5 下载量 111 浏览量
2021-01-20
04:14:15
上传
评论
收藏 99KB PDF 举报
温馨提示
前言 在爬虫的学习中,我们爬取网页信息之后就是对信息项匹配,这个时候一般是使用正则。但是在使用中发现正则写的不好的时候不能精确匹配(这其实是自己的问题!)所以就找啊找。想到了可以通过标签来进行精确匹配岂不是比正则要快。所以找到了lxml。 lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高 XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索 XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供
资源推荐
资源详情
资源评论
python3解析库解析库lxml的安装与基本使用的安装与基本使用
前言前言
在爬虫的学习中,我们爬取网页信息之后就是对信息项匹配,这个时候一般是使用正则。但是在使用中发现正则写的不好的时
候不能精确匹配(这其实是自己的问题!)所以就找啊找。想到了可以通过标签来进行精确匹配岂不是比正则要快。所以找到
了lxml。
lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档
的,但是它同样适用于HTML文档的搜索
XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数
值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择
XPath于1999年11月16日成为W3C标准,它被设计为供XSLT、XPointer以及其他XML解析软件使用,更多的文档可以访问其
官方网站:https://www.w3.org/TR/xpath/
1、、python库库lxml的安装的安装
windows系统下的安装:
#pip安装
pip3 install lxml
#wheel安装
#下载对应系统版本的wheel文件:http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
pip3 install lxml-4.2.1-cp36-cp36m-win_amd64.whl
linux下安装:
yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
pip3 install lxml
验证安装:
$python3
>>>import lxml
2、、XPath常用规则常用规则
表达式 描述
nodename 选取此节点的所有子节点
/ 从当前节点选取直接子节点
// 从当前节点选取子孙节点
. 选取当前节点
..
选取当前节点的父节点
@ 选取属性
* 通配符,选择所有元素节点与元素名
@* 选取所有属性
[@attrib] 选取具有给定属性的所有元素
[@attrib=’value’] 选取给定属性具有给定值的所有元素
[tag] 选取所有具有指定元素的直接子节点
[tag=’text’] 选取所有具有指定元素并且文本内容是text节点
(1)读取文本解析节点
from lxml import etree
text='''
<div>
<ul>
<li class="item-0"><a href="link1.html">第一个</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0"><a href="link5.html">a属性</a>
</ul>
</div>
'''
html=etree.HTML(text) #初始化生成一个XPath解析对象
result=etree.tostring(html,encoding='utf-8') #解析对象输出代码
print(type(html))
print(type(result))
print(result.decode('utf-8'))
#etree会修复HTML文本节点
<class 'lxml.etree._Element'>
<class 'bytes'>
<html><body><div>
<ul>
<li class="item-0"><a href="link1.html">第一个</a></li>
<li class="item-1"><a href="link2.html">second item</a></li>
<li class="item-0"><a href="link5.html">a属性</a>
</li></ul>
</div>
</body></html>
((2)读取)读取HTML文件进行解析文件进行解析
from lxml import etree
html=etree.parse('test.html',etree.HTMLParser()) #指定解析器HTMLParser会根据文件修复HTML文件中缺失的如声明信息
result=etree.tostring(html) #解析成字节
#result=etree.tostringlist(html) #解析成列表
print(type(html))
print(type(result))
print(result)
#
<class 'lxml.etree._ElementTree'>
<class 'bytes'>
b'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-
html40/loose.dtd">\n<html><body><div> \n <ul> \n <li class="item-0"><a href="link1.html">first item</a></li> \n <li
class="item-1"><a href="link2.html">second item</a></li> \n <li class="item-inactive"><a href="link3.html">third item</a>
</li> \n <li class="item-1"><a href="link4.html">fourth item</a></li> \n <li class="item-0"><a href="link5.html">fifth item</a>
\n </li></ul> \n </div> \n</body></html>'
((3)获取所有节点)获取所有节点
返回一个列表每个元素都是Element类型,所有节点都包含在其中
from lxml import etree
html=etree.parse('test',etree.HTMLParser())
result=html.xpath('//*') #//代表获取子孙节点,*代表获取所有
print(type(html))
print(type(result))
print(result)
#
<class 'lxml.etree._ElementTree'>
<class 'list'>
[<Element html at 0x754b210048>, <Element body at 0x754b210108>, <Element div at 0x754b210148>, <Element ul at
0x754b210188>, <Element li at 0x754b2101c8>, <Element a at 0x754b210248>, <Element li at 0x754b210288>, <Element
a at 0x754b2102c8>, <Element li at 0x754b210308>, <Element a at 0x754b210208>, <Element li at 0x754b210348>,
<Element a at 0x754b210388>, <Element li at 0x754b2103c8>, <Element a at 0x754b210408>]
如要获取li节点,可以使用//后面加上节点名称,然后调用xpath()方法
html.xpath('//li') #获取所有子孙节点的li节点
((4)获取子节点)获取子节点
剩余6页未读,继续阅读
资源评论
weixin_38718307
- 粉丝: 8
- 资源: 857
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 机械设计全自动双工位精准定位高压喷淋清洗机sw21全套设计资料100%好用.zip.zip
- 机械设计全自动升降输送移栽供料机sw18可编辑全套设计资料100%好用.zip.zip
- 机械设计全自动收带机sw16可编辑全套设计资料100%好用.zip.zip
- 机械设计筛水机sw21全套设计资料100%好用.zip.zip
- 机械设计入库旋转线模型sw18可编辑全套设计资料100%好用.zip.zip
- 机械设计日立环行线四方环形输送线(sw18可编辑+工程图)全套设计资料100%好用.zip.zip
- 机械设计蔬菜水果清洗机sw12全套设计资料100%好用.zip.zip
- 机械设计双工位机器人焊接工作站proe5.0可编辑全套设计资料100%好用.zip.zip
- 机械设计双层运输线体sw18可编辑全套设计资料100%好用.zip.zip
- 机械设计双切割头悬臂式激光机sw16可编辑全套设计资料100%好用.zip.zip
- 机械设计双移栽输送机 sw18可编辑全套设计资料100%好用.zip.zip
- 机械设计双工位实时打印贴标机sw18可编辑全套设计资料100%好用.zip.zip
- 机械设计双载具立式阀体打螺丝机sw18可编辑全套设计资料100%好用.zip.zip
- 群晖5.2-5592引导+pat
- C++编程从入门到精通基础教程
- C#编程入门与实践基础教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功