社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python爬取手机壁纸,太简单了吧!

AI科技大本营 • 1 年前 • 194 次点击  

人生苦短,快学Python!

在Python爬虫的学习过程中,爬取图片几乎是每个初学者都练习过的项目,比如我们之前就分享过:如何用Python快速爬取小姐姐的美图?

其中我们需要先利用Python中的request库和正则构建获取函数,以此爬取页面中的图片url。

最近有位同学分享他抓包获取到了小米壁纸api接口,那这样再去手机壁纸,可就太简单了!我们只需访问接口,再解析json数据,即可获取精准的壁纸图片url。

小米壁纸是什么,其实就是小米手机系统自带的app,包含了各种风格的手机壁纸。

提供接口的同学给的链接实在太长了,我试了试删去了不太影响主要作用的参数,剩下的接口如下所示:

https://thm.market.xiaomi.com/thm/****/type=WALLPAPER&tag=二次元宅

如果你使用浏览器打开该链接,就能得到10张壁纸图片的详细数据。其中参数cardStart控制翻页,调整参数tag选择不同的标签的壁纸图片。

剩下的只需调用Python下载图片到本地即可,具体代码如下所示。

def download_img(url, file_name):
    res = requests.get(url)
    img = open(file_name, 'wb')
    img.write(res.content)
    img.close()

简单解释一下,requests发起get请求拿到图片的信息。

open打开文件,以file_name(比如111.jpg)为文件名,wb代表以二进制覆盖写。

如果我们想批量下载壁纸图片怎么办呢?for循环就完事了呀!

在交互式环境中输入如下命令:

for i in range(1,20):
    url= f"https://thm.market.xiaomi.com/thm/*****/&cardStart={i}&type=WALLPAPER&tag=二次元宅"
    html = requests.get(url).content
    data = json.loads(html.decode('utf-8'))
    for j in range(10): # 一页10个
        image_url = data['apiData']['cards'][0]['products'][j]['imageUrl']
        name = data['apiData']['cards'][0 ]['products'][j]['name']
        print(name, image_url)
        image_name = f"./二次元宅/{name}.png"
        download_img(image_url, image_name)

在上述代码中,json.loads()函数是将json格式数据转换为字典。接着再搭配for循环获取某一页的10个image_urlname,其中name用于设置壁纸图片的本地路径+名称(使用相对路径下载到本地)。

最后调用前文中自定义的函数download_img(),将每一张壁纸图片都下载到二次元宅文件夹中。

▲下载代码运行

打开本地路径下的二次元宅的文件夹,会发现所有的图片都已经被下载到本地。

是不是,太简单了吧!


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/139159
 
194 次点击