与上一篇相比,本项目相对比爬表情包相对难一点。上一个爬取项目是直接解析网页源码即可找到表情包的超链接,而本项目需要通过两层解析,才能找到分辨率为(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()
当然了,如果使用多线程下载速度会更快,这个爬虫程序还是可以进一步优化的。有空再试试,或者用其他方法来做也行。
解析方式可以不同,用到的工具库也就不同,有更好的方法欢迎交流。现在还处于初学-进阶阶段,还需继续努力。
上几张效果图(真的是高清图呢~)
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0zZyQWe50mY2hmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzQTN3UDNxMTM5EzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
感觉数据分析也十分重要的,接下来会多注重这方面。