Python爬取壁纸

    不想一张张看壁纸怎么办,不想一张张下载怎么办,来让我们用python解决一切,爬取一网站所有壁纸。

1.准备前期运行环境

·python运行环境,安装request模块 (这个问题需要自己去解决)

2.分析网页行为 [想直接点的,可以跳过这一节,copy-code-running]

·网站管理员禁用了F12

openB.png

·分析出网站图片地址

01.png

可以拿这个地址去新标签试一下,我们会发现请求到的是图片的缩略图,明显不是我们想要的
我们要拿到图片的真实地址
我们去看网站请求的资源
02.png

这个请求,站长做了验证,所以我们需手动赋值数据内容保存到本地备用
我们分析一下用了什么方式请求到的真实地址
03.png

·分析地址的构成规律
json文件中每一个item
t代表图片类型 type
x代表图片宽 width
i代表图片的id
y代表图片的高 height
很显然这个拼接规律是 其中的图片id和类型要替换

3.根据分析到的解决思路写代码

我没有做用户代理,没有按工程化流程来,没有做异常处理
只是简述了这个小demo的分析原理
测试的时候下载有点迟缓,不过不影响

import requests
import json

# 定义基本变量
urlbase = "https://w.wallhaven.cc/full/"
# json文件地址
filejson = "imgjson.json"
# 下载壁纸的路径 -请自行修改
filepath = "D:\\PycharmProjects\\robots\\bizhi\\"
# 保存的拼接字符串
Imgjson = []

def Concaturl(records):
    for item in records:
        imgType = "png" if item["t"] == "p" else "jpg"
        imgid = item["i"]
        concaturl = imgid[0:2] + "/wallhaven-" + imgid + "." + imgType
        Imgjson.append(concaturl)
    print("地址拼接完成,开始下载...")

def DownLoadImg():
    i = 1
    for img in Imgjson:
        imgtype = "png" if img[-3:-2] else "jpg"
        url = urlbase + img
        ref = requests.get(url)
        fh = open(filepath + str(i) + "." + imgtype + "", "wb")
        fh.write(ref.content)
        print("第" + str(i) + "张下载成功")
        i += 1
    print("全部下载成功")

if __name__ == '__main__':
    f = open(filejson, "r")
    load_dict = json.load(f)
    records = load_dict["result"]["records"]
    # 拼接好的字符串列表
    Concaturl(records)
    # 下载函数
    DownLoadImg()
04.png

好看的壁纸就存下来啦,不用挑,也不用一个个下。人生路远,简单就好!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 爬虫就是请求网站并提取数据的自动化程序,其中请求,提取,自动化是爬虫的关键。Python作为一款出色的胶水语...
    王奥OX阅读 3,473评论 1 8
  • 负重前行,是生活给我们的盔甲吗?要经历多少失望,绝望后才能对着希望微笑! 近期工作异常的忙碌,两部分工作都在急促的...
    虹丹阅读 117评论 0 0
  • 人间过客, 一场苦旅。 宁静可以致远, 何不漫步红尘? 看看山, 看看水, 留意沿途风景。 搬开心墙, 清除内心阴...
    浪淘沙0706阅读 142评论 0 1
  • 生命是一张弓,那弓弦是梦想; 梦想只要能能持久,就能成为现实; 生活中没有理想的人,是很可悲的。
    悦知木兮阅读 2,261评论 40 38