# -*- coding:utf-8 -*-
"""
作者:lzl
日期:2022年06月27日
功能介绍:爬取网站上的高清壁纸
"""
# 步骤 1 拿到页面源代码 2提取到所有的ul/li/a标签里的href值链接
# 需要的库,使用xpath来匹配
import requests
import re
import json # 用来将获取到DeskPicArr真正转成字典
from lxml import html
etree = html.etree
# 拿到页面源代码
# url = 'https://desk.zol.com.cn/fengjing/'
url = f'https://desk.zol.com.cn/fengjing/.html'
resp = requests.get(url)
resp.encoding = 'gb2312'
# print(resp.text)
et = etree.HTML(resp.text)
# 通过xpath语法寻找每个标签的href
result_all = et.xpath('//div[@class="choosebox mt"]/dl/dd[@class="brand-sel-box clearfix"]/a/@href')[0:24]
# print(result_all)
for i in result_all: # i表示的是外层类型
url = 'https://desk.zol.com.cn' + i
# print(url)
for j in range(0, 11): # j是每个类型里面的页面.11为每个类型的爬取页面
page = j
url1 = url + f'{page}.html'
# print(url1)
resp = requests.get(url1)
resp.encoding = 'gb2312'
# print(resp.text)
# xpath语法寻找"风景"标签里的href
et = etree.HTML(resp.text)
result = et.xpath('//ul[@class="pic-list2 clearfix"]/li/a/@href')[2:]
# print(result)
# 循环弄出有用的url,注意前面少了域名(https://desk.zol.com.cn),需要字符串拼接
# 获取到了每个类型下每个页面下的没组图片
for item in result: # 前面的exe文件不会执行,但是也通过前面[2:]去掉
url = 'https://desk.zol.com.cn' + item
# print(url)
# 对子页面进行分析\提取图片下载地址\下载图片,
# 方案一:1找到子页面的源代码2想办法提取img标签3获取一张的src(方案很麻烦,每次都要换图片)
# 解决方案:1 访问到详情页(一组图片),获取源代码中的<script>下(var deskPicArr = "****")
# 解决方案:2 分析(*****),提取两个内容,(imgsrc\最大分辨率orisize) 但是不是标签里,用re正则
# 解决方案:3 将orisize 替换到imgsrc中的##size##中得到下载路径
# 解决方案:4 下载图片
resp = requests.get(url)
# print(resp.text)
# 使用re正则表达式提取内容
obj = re.compile(r'var deskPicArr.*?=(?P<DeskPicArr>.*?);', re.S)
result1 = obj.search(resp.text) # 因为只有一个,可以不用finditer()
deskPicArr = result1.group('DeskPicArr') # 正则默认返回字符串,但是长得很像字典
# print(deskPicArr)
# 把类似字典的字符串转换成字典,只有一个键值对,值为一个列表,键为'list'
deskPicArr_dict = json.loads(deskPicArr)
# print(deskPicArr_dict)
# 提取字典当中的信息,再在列表中提取orisize和imgsrc,注意一定要循环提取
for item1 in deskPicArr_dict['list']:
img_size = item1.get('oriSize')
img_src = item1.get('imgsrc')
# print(img_size, img_src)
# 直接将img_size 替换到img_src中的##size##
img_url = img_src.replace('##SIZE##', img_size)
# print(img_url)
img_name = img_url.split('/')[-1] # 保存的文件名不可以重复
# 图片下载,1发送网络请求
resp_img = requests.get(img_url)
# 此时为图片不可以拿到文本,拿到非文本,resp_img.conten()得到字节
# 注意文件不要直接下载在同目录下,要不然pycharm会检索,很卡,将文件夹img排除过滤
with open(f'img/{img_name}', 'wb') as file: # 注意图片为二进制
file.write(resp_img.content)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
python爬虫,爬取10000张高清美图,适合新手进阶,xpath和正则表达式匹配,使用python的库访问,对多个页面,图片的多种类型进行爬取,可以根据自己电脑配置进行线程数量的设置,也可以自己定义爬取的数量,类型以及页面个数,(里面有可执行文件和详细的代码注释)
资源推荐
资源详情
资源评论
收起资源包目录
python爬虫.zip (3个子文件)
python爬虫
img
爬取高清图.py 4KB
desktop_wallpaper.py 4KB
爬取高清图.exe 9.63MB
共 3 条
- 1
资源评论
- 洛罹2023-07-19资源有一定的参考价值,与资源描述一致,很实用,能够借鉴的部分挺多的,值得下载。
智信能达逐梦芳华
- 粉丝: 44
- 资源: 14
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功