1、安装
pip insatll lxml
from lxml import etree
2、xpath解析文件
#(1)本地文件 etree.parse
#(2)服务器相应数据 response.read().decode('utf-8') etree.HTML()
##############数据如下
<ul>
<li id="12" clazz = 15>北京</li>
<li>上海</li>
<li>武汉</li>
</ul>
3、解析本地文件
#xpath解析本地文件
tree = etree.parse('demo10pachong.html')
print(tree)
4、xpath基本语法
(1)路径查询(查看html文件中标签,层层深入)
//子孙节点
/子节
#tree.xpath('xpath路径')
li_list = tree.xpath('//body/ul/li')
print(li_list)
print(len(li_list))
(2)谓词查询,属性查询,模糊查询,内容查询
#查看包含id标签的
li_list2 =tree.xpath('//ul/li[@id]/text()') #text是为了获取里面数据的
li_list2 =tree.xpath('//ul/li[@id="12"]/text()') #获取id=12的 谓词查询
li_list2 =tree.xpath('//ul/li[@id="12"]/@class') #获取id=12的,clazz的值 属性查询
print(li_list2)
#id中包含li的标签,模糊查询
li_list3 = tree.xpath('//ul/li[contains(@id,"l")]/text()')
print(li_list3)
d
#查询以l开头的标签,内容查询
li_list4 = tree.xpath('//ul/li[starts-with(@id,"l")]/text()')
print(li_list4)
5、解析
#1、获取网络源码
#2、解析hxml文件
#3、打印输出
from lxml import etree
import urllib.request
from fake_headers import Headers
#请求的url
url = "https://www.baidu.com/"
#请求头
header =Headers(
browser='chrome',
os = 'win',
headers=True
)
#请求对象的定制
request = urllib.request.Request(url=url,headers=header.generate())
#模拟浏览器访问服务器
res = urllib.request.urlopen(request)
#获取网页源码
content = res.read().decode('utf-8')
print(content)
#解析网页源码,来获取数据
#解析服务器响应的文件
tree = etree.HTML(content)
# #获取数据
result = tree.xpath('//input[@id="su"]/@value')[0]
print(result)