與上一篇相比,本項目相對比爬表情包相對難一點。上一個爬取項目是直接解析網頁源碼即可找到表情包的超連結,而本項目需要通過兩層解析,才能找到分辨率為(1920*1080)的高清桌面。為何如此?因為第一層解析得到的data_original(也就是圖檔位址)其實不是高清圖,都是低畫質圖檔還有一些.png的标題圖,而真正想要獲得高清桌面的話,要進行再次解析。也就是把第一層解析出來的資料做資料分析,找出提取規律,提取出高清桌面所在的網址。最後才能找到圖檔的超連結進行下載下傳。
第一層解析網頁源碼和下載下傳儲存資料到本地這兩個步驟與上篇爬取表情包的步驟方法是一樣的,原理可直接參照:
https://blog.csdn.net/honorwh/article/details/88659738
接下來就是上本次項目的源代碼了:
import requests
from bs4 import BeautifulSoup
from urllib import request
import os
import threading
headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"}
img_list = []
URLS = []
def pick_gqbz():
for l in range(1,6):
urls = "http://www.win4000.com/mt/wangzherongyao_" + str(l) + str(".html")
response = requests.get(urls, headers = headers)
text = response.text
soup = BeautifulSoup(text, 'lxml')
img_list = soup.find_all("ul", attrs={"class":"clearfix"})
temp = str(img_list).split()
for i in range(len(temp)):
if len(temp[i]) < 35:
#print(len(temp[i]))
continue
if temp[i][6:34] == 'http://www.win4000.com/meinv':
#print(temp[i])
URLS.append(temp[i][6:-1])
else:
continue
for k in range(len(URLS)):
response = requests.get(URLS[k], headers = headers)
text = response.text
soup = BeautifulSoup(text, 'lxml')
img_list = soup.find_all("img", attrs={"class":"pic-large"})
a, b = str(img_list).rfind('http', 1), str(img_list).rfind('jpg', 1)
img_url = str(img_list)[a:int(b) + 3]
filename = img_url.split("/")[-1]
fullpath = os.path.join("images", filename)
while img_url[-4:] == ".gif":
continue
request.urlretrieve(img_url, fullpath)
print("%s下載下傳完成" % filename)
if __name__ == "__main__":
pick_gqbz()
當然了,如果使用多線程下載下傳速度會更快,這個爬蟲程式還是可以進一步優化的。有空再試試,或者用其他方法來做也行。
解析方式可以不同,用到的工具庫也就不同,有更好的方法歡迎交流。現在還處于初學-進階階段,還需繼續努力。
上幾張效果圖(真的是高清圖呢~)
感覺資料分析也十分重要的,接下來會多注重這方面。