聽說你在自己喜歡的明星壁紙?比如李易峰,王一博,易烊千璽、王源、王俊凱,李現等。今天教你批量下載這些明星高清壁紙(文末有福利)
最近圖慌,閑來無事爬取李易峰的高清圖片,當做手機壁紙也是不錯的選擇。
廢話不多說,下面上效果圖:
是不是很帥氣呢?
爬取的步驟也非常簡單:
1、獲取目標網址。
2、瀏覽器抓包,得到圖片的具體url。
3、通過Python編寫代碼,用requests模塊對url發起請求,將圖片下載到本地文件夾中。
本文是通過面向對象的方法,代碼更加穩定,想要多少張圖片就能下載多少張圖片。
1、分析目標網站
首先,要想爬取圖片,第一步肯定是要分析目標網址,以此來獲取圖片的 url。打開瀏覽器的控制台,對該網頁進行抓包,發現該網頁上的圖片是通過瀑布流的方式加載出來的,於是在往下滑,得到的下方箭頭指向的網址,那這個是否就是我們需要的呢。
為了證實該網址里面有我們需要的數據,打開preview,發現這些這是我們需要的,數據通過json的格式給我們呈現出來。
抓包得到我們需要的網址,接下來就簡單多了,通過requests模塊向該網址發起請求,那不完事了嗎。
2、編寫代碼
說干就干,首先導入我們需要的模塊
import requests
import time
import random
from urllib.request import urlretrieve
import os
下面就開始敲代碼,通過面向對象的方式,先將具體的框架寫下來
class Wangyibo(object):
def __init__(self,name):
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'
}
self.name = name
if __name__ == "__main__":
#明星圖片
name="李易峰"
Wangyibo(name).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='+self.name+'&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 download_pic(self, href):
# 判斷當前目錄下是否存在該文件夾,如果沒有就創建
if not os.path.exists(self.name):
os.mkdir(self.name)
name = os.path.split(href)[1]
urlretrieve(href, './'+self.name+'/{}'.format(name))
print("=================={}下載完成===================".format(name))
time.sleep(random.random())
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即為圖片的網址
為了防止爬取太快,可能會被封IP,因此每爬取一張圖片都休息一定的時間,保證爬蟲的安全、穩定性。最后運行整體的程序,過不了多久,王一博的帥照全部都被下載到本地啦。
3、結語
整個程序的代碼相對來說還是非常簡單的,感興趣的小伙伴們都可以自己試一下。
if __name__ == "__main__":
#明星圖片
name="李易峰"
Wangyibo(name).run()
在這里改為自己喜歡的明星名字就可以了,他/她的高清壁紙非你莫屬。
【本文完整源碼獲取方式】
識別文末二維碼,回復:明星壁紙
- END -
【各種爬蟲源碼獲取方式】
識別文末二維碼,回復:爬蟲源碼
歡迎關注公眾號:Python爬蟲數據分析挖掘,方便及時閱讀最新文章
記錄學習python的點點滴滴;
回復【開源源碼】免費獲取更多開源項目源碼;