urlib在处理请求上有着强大的作用,xpath对于HTML的处理同样出色,主要分为两部分,一个是对本地文件的处理,使用etree.parse(),还有一个是处理服务器的响应,使用etree.HTML(),较为关键是xpath的基本语法,路径的正确书写。包括按照id、class、路径、等的查询条件进行匹配。
from lxml import etree
#xpath 解析
# 1。本地文件 etree.parse
# 2。直接解析服务器响应文件(response.read().decode('utf-8') etree.HTML
#xpath 解析本地文件
tree=etree.parse('rhp_demo01.html')
print(tree)
# etree.xpath('xpath路径')
# xpath 基本语法
# 1.路径查询 //: 查找所有子孙节点,不考虑层级关系 /:查找孩子节点
# 查找ul下面的li
li_list=tree.xpath('//ul/li')
# 判断列表的长度
print(len(li_list))
print(li_list)
# 2.为谓词查询
# 查找所有id的属性带li的标签
# text() 获取标签中的内容
li_list=tree.xpath('//ul/li[@id]/text()')
print(len(li_list))
print(li_list)
# 查找 id =1 的标签的内容 注意引号的问题
li=tree.xpath('//ul/li[@id=1]/text()')
print(li)
# 3. 按照class查找
# 查找到id为1的li标签的class的属性值
li=tree.xpath('//ul/li[@id=1]/@class')
print(li)
# 4.模糊查询
# 查询id中包含0的标签
li_list=tree.xpath('//ul/li[contains(@id,0)]/text()')
print(li_list)
# 5. str-with 以xxx开头的
li_list=tree.xpath('//ul/li[starts-with(@id,0)]/text()')
print(li_list)
# 6.逻辑运算
# 查询id=1 和 class =c1 的标签
li_list=tree.xpath('//ul/li[@id=01 and @class="c1"]/text()')
print(li_list)
li_list=tree.xpath('//ul/li[@id=01 or @id=2]/text()')
print(li_list)
# !!! 属性的或使用or 节点的或使用|
import urllib.parse
import urllib.request
from xml import etree
# 1。获取网页的源码
# 2。解析服务器响应的文件 etree.Html
url='http://www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
request=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
print(content)
# 解析网页源码 获取想要的数据
tree=etree.HTML(content)
# 获取想要的数据 返回值是一个列表类型的值
result=tree.xpath('//input[@id=su]/@value')
print(result)