4K美女壁紙爬取
4K美女壁紙爬取
一、前言
拍了zhenguo的課程,今天繼續(xù)學(xué)習(xí)課程同時(shí),嘗試使用BeautifulSoup4這個(gè)網(wǎng)頁解析的方法爬取圖片,看完后心血來潮,想自己也試一下。
爬完后并總結(jié)這篇投稿給zhenguo,獎(jiǎng)勵(lì)我50元稿費(fèi),很開心。
最先想到的是彼岸圖網(wǎng),這個(gè)網(wǎng)站上有很多4k壁紙,打開網(wǎng)頁后,我選擇了4k美女壁紙作為本次爬蟲的目標(biāo),爬取到的圖片截圖如下:


二、過程
1.首先,我們拿到前三頁的網(wǎng)頁地址。
2.通過分析可以看出,當(dāng)頁面變化時(shí),index后面會(huì)發(fā)生改變,但在第一頁時(shí)并沒有數(shù)字顯示,所以做出以下操作,通過input獲取我們想要爬取的頁數(shù),使用if語句對(duì)index進(jìn)行賦值,再傳入要爬取的網(wǎng)址中。
3.接下來就是獲取網(wǎng)頁源代碼了,使用requests.get拿到網(wǎng)頁源代碼,在打印時(shí)發(fā)現(xiàn)出現(xiàn)了亂碼,根據(jù)網(wǎng)頁源代碼里的提示,規(guī)定格式為'gbk',再獲取bs對(duì)象main_page,指定解析器為'lxml'。
4.在網(wǎng)頁源代碼中分析得知,需要的內(nèi)容在標(biāo)簽div class='slist'的標(biāo)簽中,每一個(gè)li標(biāo)簽下的a標(biāo)簽包含了要爬取的每張圖片的所有信息,所以使用find('div',class_='slist')先定位主標(biāo)簽,再使用find_all('a')定位每一個(gè)子標(biāo)簽。接著使用for循環(huán),遍歷每一個(gè)a標(biāo)簽下的內(nèi)容,使用get('href')拿到該圖片的url,再使用切片的方法,提出圖片的數(shù)字編號(hào),傳入下載地址,就得到了每一個(gè)圖片的下載地址。注意:這里的下載地址是通過抓包獲取,在子頁面的網(wǎng)頁源代碼中是找不到的。
5.有了下載地址,使用requests模塊獲取響應(yīng)。這里要注意,該網(wǎng)站要登錄后才能進(jìn)行下載,所以我們要在請(qǐng)求頭里傳入cookie參數(shù)。獲取響應(yīng)后我們就要寫入文件保存起來。

三、完整源碼
import requests
from bs4 import BeautifulSoup
import time
'''
第一頁 https://pic.netbian.com/4kmeinv/index.html
第二頁 https://pic.netbian.com/4kmeinv/index_2.html
第三頁 https://pic.netbian.com/4kmeinv/index_3.html
'''
headers = {
'cookie': '__yjs_duid=1_609256ccf97c86f63356e4e9f3fa5eb21654735480955; Hm_lvt_c59f2e992a863c2744e1ba985abaea6c=1654735481; zkhanecookieclassrecord=%2C65%2C59%2C66%2C54%2C53%2C55%2C; PHPSESSID=25p1pnl1nog1nn56lic0j2fga6; zkhanmlusername=qq803835154342; zkhanmluserid=826128; zkhanmlgroupid=3; zkhanmlrnd=VQOfLNvHK33WGXiln7nY; zkhanmlauth=264643c01db497a277bbf935b54aa3f3; Hm_lpvt_c59f2e992a863c2744e1ba985abaea6c=1654741154'
}
page = int(input('請(qǐng)輸入要爬取的頁數(shù):'))
for i in range(page):
if i == 0:
index = 'index'
else:
index = f'index_{i+1}'
theme_url = f'https://pic.netbian.com/4kmeinv/{index}.html' # 要爬取主題的url
response = requests.get(theme_url)
response.encoding = 'gbk'
main_page = BeautifulSoup(response.text,features="lxml")
li_all_a = main_page.find('div',class_='slist').find_all('a') # li標(biāo)簽下所有的a標(biāo)簽
for a in li_all_a:
href = a.get('href')
picture_num = href[8:13]
picture_name = a.find('b').string
down_url = f'https://pic.netbian.com/downpic.php?id={picture_num}&classid=54' # 子頁面中的下載地址
down_response = requests.get(down_url,headers=headers)
with open(f'4k美女圖片/'+picture_name+'.jpg',mode='wb') as f:
f.write(down_response.content) # 圖片內(nèi)容寫入文件
print('正在保存',picture_name+'.jpg')
time.sleep(1)
response.close()
print('程序運(yùn)行完畢')
四、結(jié)尾
以上是爬取4k美女壁紙的簡(jiǎn)單案例,有興趣的小伙伴可以對(duì)比一下其他主題壁紙,參數(shù)稍作修改即可下載其他主題壁紙了。
