解析:xpath ---安装和基本使用
首先在游览器中添加xpath扩展
再安装lxml,我用的Anaconda 的python虚拟环境,所以 https://zhuanlan.zhihu.com/p/366015720 可以采用链接中的方式来安装包,也可以可视化的去安装包
xpath 本地文件的基本使用,xpath返回的是列表数据
from lxml import etree # xpath解析 # (1)本地文件 etree.parse # (2)服务器响应的数据 response.read().decode('utf-8') ***** etree.HTML() # xpath解析本地文件 tree = etree.parse('070_尚硅谷_爬虫_解析_xpath的基本使用.html') #tree.xpath('xpath路径') # 查找ul下面的li # li_list = tree.xpath('//body/ul/li') # 查找所有有id的属性的li标签 # text()获取标签中的内容 # li_list = tree.xpath('//ul/li[@id]/text()') # 找到id为l1的li标签 注意引号的问题 # li_list = tree.xpath('//ul/li[@id="l1"]/text()') # 查找到id为l1的li标签的class的属性值 # li = tree.xpath('//ul/li[@id="l1"]/@class') # 查询id中包含l的li标签 # li_list = tree.xpath('//ul/li[contains(@id,"l")]/text()') # 查询id的值以l开头的li标签 # li_list = tree.xpath('//ul/li[starts-with(@id,"c")]/text()') #查询id为l1和class为c1的 # li_list = tree.xpath('//ul/li[@id="l1" and @class="c1"]/text()') li_list = tree.xpath('//ul/li[@id="l1"]/text() | //ul/li[@id="l2"]/text()') # 判断列表的长度 print(li_list) print(len(li_list))
xpath 解析服务器响应的文件,获取百度一下
# (1) 获取网页的源码 # (2) 解析 解析的服务器响应的文件 etree.HTML # (3) 打印 import urllib.request url = 'https://www.baidu.com/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36' } # 请求对象的定制 request = urllib.request.Request(url = url,headers = headers) # 模拟浏览器访问服务器 response = urllib.request.urlopen(request) # 获取网页源码 content = response.read().decode('utf-8') # 解析网页源码 来获取我们想要的数据 from lxml import etree # 解析服务器响应的文件 tree = etree.HTML(content) # 获取想要的数据 xpath的返回值是一个列表类型的数据 result = tree.xpath('//input[@id="su"]/@value')[0] print(result)
xpath采集图片 :站长素材
注意懒加载问题,要获取变化之前的图片地址
# (1) 请求对象的定制 # (2)获取网页的源码 # (3)下载 # 需求 下载的前十页的图片 # https://sc.chinaz.com/tupian/qinglvtupian.html 1 # https://sc.chinaz.com/tupian/qinglvtupian_page.html import urllib.request from lxml import etree def create_request(page): if(page == 1): url = 'https://sc.chinaz.com/tupian/qinglvtupian.html' else: url = 'https://sc.chinaz.com/tupian/qinglvtupian_' + str(page) + '.html' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36', } request = urllib.request.Request(url = url, headers = headers) return request def get_content(request): response = urllib.request.urlopen(request) content = response.read().decode('utf-8') return content def down_load(content): # 下载图片 # urllib.request.urlretrieve('图片地址','文件的名字') tree = etree.HTML(content) name_list = tree.xpath('//div[@id="container"]//a/img/@alt') # 一般设计图片的网站都会进行懒加载 src_list = tree.xpath('//div[@id="container"]//a/img/@src2') for i in range(len(name_list)): name = name_list[i] src = src_list[i] url = 'https:' + src urllib.request.urlretrieve(url=url,filename='./loveImg/' + name + '.jpg') if __name__ == '__main__': start_page = int(input('请输入起始页码')) end_page = int(input('请输入结束页码')) for page in range(start_page,end_page+1): # (1) 请求对象的定制 request = create_request(page) # (2)获取网页的源码 content = get_content(request) # (3)下载 down_load(content)
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术