文章目录
近些天,别人都是成双成对,单身的我该咋办?
好久没有更新壁纸库,这些天就填充一点壁纸好了!
针对自己以前爬取壁纸经验,有一个很大的缺点:
- 图片分辨率不统一,即使统一了,也很少有符合自己电脑的(2160x1440)分辨率
那么今天就来实现一个可以自己控制分辨率的壁纸爬虫脚本。
一、导入的库
- 这些是脚本代码所用到的库
import os
import json
import chardet
import logging
import requests
from tqdm import tqdm
from fake_useragent import UserAgent
没有的库,及时下载嗷。
还有一个库,pprint
,在写爬虫的过程中也起到了很重要的作用。
它可以工整地输出json数据。
二、页面分析
目标网址:http://www.jijianzy.com/bz/
进入页面,按如下操作
接下来进入一个全新的页面,接着打开抓包工具,选择XHR,并且不要刷新!不要刷新!不要刷新! 然后开始下拉。
每次下滑到一定程度,就会多出来一个包。
里面装的就是壁纸啦!
点击一个查看详情
最上面和最下面有我们想要的信息。
然后就可以构建url和param了。
url = 'http://www.jijianzy.com/bz/api.php?'
param = {
'cid': '6',
'start': '30',
'count': '30'
}
- 之前,我也有写过关于json数据的爬取,有兴趣的小伙伴可以去看看
三、完整代码
- 这里面有详细的注释嗷
# -*- coding: UTF-8 -*-
"""
@Author :远方的星
@Time : 2021/5/21 10:26
@CSDN :https://blog.csdn.net/qq_44921056
@腾讯云 : https://cloud.tencent.com/developer/column/91164
"""
import os
import json
import chardet
import logging
import requests
from tqdm import tqdm
from fake_useragent import UserAgent
# 随机产生请求头
ua = UserAgent(verify_ssl=False, path='fake_useragent.json')
# 日志输出的基本配置
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
# 创建一个文件夹
path = 'D:/极简壁纸'
if not os.path.exists(path):
os.mkdir(path)
# 随机切换请求头
def random_ua():
headers = {
"user-agent": ua.random
}
return headers
# 获取图片url
def get_imgae_url(url, start, display):
# cid=6代表《美女模特》页面
param = {
'cid': '6',
'start': start,
'count': '30'
}
response = requests.get(url=url, headers=random_ua(),params=param)
# 自动转换编码,与网页一致
response.encoding = chardet.detect(response.content)['encoding']
# 获取页面内容
response = response.text
# 将内容转换成json格式
data_s = json.loads(response)
# 提取data里的数据
a = data_s["data"]
# 定义一个空列表,用来放图片url
url_list = []
for i in range(len(a)):
# 提取其中key值为"img_1280_800"的数据(提取其它的类似数据也一样)
data = a[i].get("img_1280_800", "not exist")
# 切割字符串
b = data.split('/')
# 将图片改为想要设置的格式
b[4] = '{}_100'.format(display)
# 拼接字符串,得到图片url
image_url = '/'.join(b)
url_list.append(image_url)
return url_list
# 下载图片
def download_image(url):
num = 1
logging.info('您的需求我已经收到啦,很快就能帮你完成嗷,请稍等一会会。。。。')
for i in tqdm(range(len(url))):
image_url = url[i]
image_data = requests.get(url=image_url, headers=random_ua()).content
image_name = '{}.png'.format(num)
save_path = path + '/' + image_name
with open(save_path, 'wb') as f:
f.write(image_data)
num += 1
logging.info('任务已完成!感谢您的使用!')
def main():
url = 'http://www.jijianzy.com/bz/api.php?'
page = input('请输入您想要爬取的页数:')
display = input('请输入您想要的图片分辨率(格式为1920_1080):')
page = int(page) + 1
start = 0 # 起步为0,每一组图片加30
url_list_s = [] # 定义一个空列表装url
for m in range(1, page): # 多页下载
url_list = get_imgae_url(url, start, display)
url_list_s += url_list
start += 30
download_image(url_list_s)
if __name__ == '__main__':
main()
四、结果展示
文章开头不是有结果?
什么?还不够!!!
好叭,再来一点!
pycharm的背景设置,可以参考:PyCharm自定义背景图片、更换主题
害,应该能“过节”了。。。。
五、Blogger’s speech
如有不足,还请大佬评论区留言或私信我,我会进行补充。
感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。
作者:远方的星
CSDN:https://blog.csdn.net/qq_44921056
腾讯云:https://cloud.tencent.com/developer/column/91164
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。