520没脱单,521还没脱单?!那就准备点图片,独自过节!

文章目录


近些天,别人都是成双成对,单身的我该咋办?

520没脱单,521还没脱单?!那就准备点图片,独自过节!
好久没有更新壁纸库,这些天就填充一点壁纸好了!

520没脱单,521还没脱单?!那就准备点图片,独自过节!
针对自己以前爬取壁纸经验,有一个很大的缺点:

  • 图片分辨率不统一,即使统一了,也很少有符合自己电脑的(2160x1440)分辨率

那么今天就来实现一个可以自己控制分辨率的壁纸爬虫脚本。

520没脱单,521还没脱单?!那就准备点图片,独自过节!

一、导入的库

  • 这些是脚本代码所用到的库
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/

进入页面,按如下操作
520没脱单,521还没脱单?!那就准备点图片,独自过节!
接下来进入一个全新的页面,接着打开抓包工具,选择XHR,并且不要刷新!不要刷新!不要刷新! 然后开始下拉。
520没脱单,521还没脱单?!那就准备点图片,独自过节!
每次下滑到一定程度,就会多出来一个包。
里面装的就是壁纸啦!

点击一个查看详情
520没脱单,521还没脱单?!那就准备点图片,独自过节!

520没脱单,521还没脱单?!那就准备点图片,独自过节!
最上面和最下面有我们想要的信息。

然后就可以构建url和param了。

url = 'http://www.jijianzy.com/bz/api.php?'
param = {
       'cid': '6',
       'start': '30',
       'count': '30'
    }
  • 之前,我也有写过关于json数据的爬取,有兴趣的小伙伴可以去看看

python爬虫随心所欲地爬取百度图片

三、完整代码

  • 这里面有详细的注释嗷
# -*- 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()

四、结果展示

文章开头不是有结果?

什么?还不够!!!

好叭,再来一点!

520没脱单,521还没脱单?!那就准备点图片,独自过节!
pycharm的背景设置,可以参考:PyCharm自定义背景图片、更换主题

520没脱单,521还没脱单?!那就准备点图片,独自过节!
害,应该能“过节”了。。。。

五、Blogger’s speech

如有不足,还请大佬评论区留言或私信我,我会进行补充。

感谢您的支持,希望可以点赞,关注,收藏,一键三连哟。

作者:远方的星
CSDN:https://blog.csdn.net/qq_44921056
腾讯云:https://cloud.tencent.com/developer/column/91164
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

上一篇:520 钻石争霸赛 7-5 大勾股定理 (循环)


下一篇:“攻城狮”送“小女友”的520礼物,我酸了!