用Python爬取王一博高清图片,竟然如此简单!(文末有惊喜)

最近图慌,闲来无事爬取博子哥的高清图片,当做手机壁纸也是不错的选择。

废话不多说,下面上效果图:

python转高清图片 python导出高清图片_python

是不是很帅气呢?

爬取的步骤也非常简单:

1、获取目标网址。
2、浏览器抓包,得到图片的具体url。
3、通过Python编写代码,用requests模块对url发起请求,将图片下载到本地文件夹中。

本文是通过面向对象的方法,代码更加稳定,想要多少张图片就能下载多少张图片。

1、分析目标网站

首先,要想爬取图片,第一步肯定是要分析目标网址,以此来获取图片的 url。打开浏览器的控制台,对该网页进行抓包,发现该网页上的图片是通过瀑布流的方式加载出来的,于是在往下滑,得到的下方箭头指向的网址,那这个是否就是我们需要的呢。

python转高清图片 python导出高清图片_Python_02


为了证实该网址里面有我们需要的数据,打开preview,发现这些这是我们需要的,数据通过json的格式给我们呈现出来。

python转高清图片 python导出高清图片_python_03


抓包得到我们需要的网址,接下来就简单多了,通过requests模块向该网址发起请求,那不完事了吗。

python转高清图片 python导出高清图片_抓包_04


2、编写代码

说干就干,首先导入我们需要的模块

import requests
import time
import random
from urllib.request import urlretrieve
import os

下面就开始敲代码,通过面向对象的方式,先将具体的框架写下来

class Wangyibo(object):
    def __init__(self):
        pass
    def run(self):
    	pass
if __name__ == "__main__":
	Wangyibo().run()

为了不被网站发现我们是网络爬虫而不是浏览器,因此要加入请求头。

def __init__(self):
	self.headers = {
	'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
	}

下面步入正轨,对网址发送请求,先暂时爬取九页

def run(self):
        for i in range(0,200,24):
            url = 'https://www.duitang.com/napi/blog/list/by_search/?kw=%E7%8E%8B%E4%B8%80%E5%8D%9A&type=feed&include_fields=top_comments%2Cis_root%2Csource_link%2Citem%2Cbuyable%2Croot_id%2Cstatus%2Clike_count%2Clike_id%2Csender%2Calbum%2Creply_count%2Cfavorite_blog_id&_type=&start={}'.format(i)
            self.request(url)
            
    def request(self,url):
        response = requests.get(url,headers=self.headers)
        time.sleep(random.uniform(0,1))
        lists = response.json()['data']['object_list']
        for list in lists:
            pic_url = list['photo']['path']
            self.download_pic(pic_url) #pic_url即为图片的网址

下面对该网址发起请求,将图片下载到本地

def download_pic(self,href):
		#判断当前目录下是否存在该文件夹,如果没有就创建
        if not os.path.exists("王一博"):
            os.mkdir("王一博")

        name = os.path.split(href)[1]
        urlretrieve(href,'./王一博/{}'.format(name))
        print("=================={}下载完成===================".format(name))
        time.sleep(random.random())

为了防止爬取太快,可能会被封IP,因此每爬取一张图片都休息一定的时间,保证爬虫的安全、稳定性。最后运行整体的程序,过不了多久,王一博的帅照全部都被下载到本地啦。

python转高清图片 python导出高清图片_Python_05


3、结语

整个程序的代码相对来说还是非常简单的,感兴趣的小伙伴们都可以自己试一下,毕竟谁不喜欢帅气的博子哥呢。

以为这就结束了?

并没有!

在最后,通过Python,我将爬取的图片一张张拼接成心形图(放大享用),祝王一博8月5日生日快乐!

python转高清图片 python导出高清图片_抓包_06