Lxml库是基于lbxml2的XML解析库的Python封装。
作用:使用Xpath语法解析定位网页数据。
LXMl库的安装与使用方法
Lxml库的安装
windows系统下的安装:
![复制代码](https://i-blog.csdnimg.cn/blog_migrate/3261cce84d531bb17b20112813d07e17.gif)
#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
![复制代码](https://i-blog.csdnimg.cn/blog_migrate/3261cce84d531bb17b20112813d07e17.gif)
linux下安装:
yum install -y epel-release libxslt-devel libxml2-devel openssl-devel
pip3 install lxml
欢迎进群交流
Lxml库使用
修正HTML代码
Lxml为XML的解析库,很好的支持了HTML文档的解析功能。
from lxml import etree
text="""
one
"""
html1=etree.HTML(text)
print(html1)
etree库把HTML文档解析为Element对象,可以通过以下代码输出解析过的HTML文档
from lxml import etree
text="""
one
"""
html1=etree.HTML(text)
print(html1)
result=etree.tostring(html1)
print(result)
通过运行程序我们可以看出,Lxml库自动补全了HTML代码。
读取HTML文件
通过PyCharm新建一个.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<title>flower</title>
</head>
<body>
one
</body>
</html>
from lxml import etree
html1=etree.parse('flower.html')
result=etree.tostring(html1,pretty_print=True)
print(result)
解析HTML文件
import requests
from lxml import etree
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362'
}
res=requests.get('https://book.douban.com/',headers=headers)
html=etree.HTML(res.text)
result=etree.tostring(html)
print(result)
Xpath语法
节点关系
父节点
每个元素及其属性都有一个父节点,例如
<user>
<name>xiao ming</name>
<sex>JK. Rowling</sex>
<id>34</id>
<goal>89</goal>
</user>
其中user元素为name,sex,id,goal元素的父节点
子节点
元素节点可有0个,一个,或者多个自节点,在上述例子中name,sex,id,goal为user的子节点。
同胞节点
name,sex,id,goal互为同胞节点,即同胞节点有相同的父亲节点
先辈节点
先辈节点为某元素的父节点和父节点的父节点
后代节点
某节点的子节点和子节点的子节点
节点选择
Xpath使用路径表达式在XML文档中选取节点,节点是通过沿着路径或者step来选取的
使用技巧
import requests
from lxml import etree
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400'
}
#//*[@id="content"]/div/div[1]/div[1]/div[2]/div/div/ul[2]/li[1]/div[1]/a/img
res=requests.get('https://book.douban.com',headers=headers)
selector=etree.HTML(res.text)
img=selector.xpath('//*[@id="content"]/div/div[1]/div[4]/div[2]/ul/li[1]/div[2]/h4/a/text()')[0]
print(img)
通过/text()获取标签内的文字信息