【一、項目背景】
王者榮耀作為當下最火的遊戲之一,裏面的人物信息更是惟妙惟肖,但受到官網的限制,想下載一張高清的圖片很難。(圖片有版權)。
以彼岸桌面這個網站為例,爬取王者榮耀圖片的信息。
【二、項目目標】
實現將獲取到的圖片批量下載。
【三、涉及的庫和網站】
1、網址如下:
https://www.netbian.com/s/wangzherongyao/index.htm/
2、涉及的庫:requests、lxml
【四、項目分析】
首先需要解決如何對下一頁的網址進行請求的問題。可以點擊下一頁的按鈕,觀察到網站的變化分別如下所示:
https://www.netbian.com/s/wangzherongyao/index_2.htm
https://www.netbian.com/s/wangzherongyao/index_3.htm
https://www.netbian.com/s/wangzherongyao/index_4.htm
觀察到只有index_()變化,變化的部分用{}代替,再用for循環遍歷這網址,實現多個網址請求。
https://www.netbian.com/s/wangzherongyao/index_{}.htm
【五、項目實施】
1、我們定義一個class類繼承object,然後定義init方法繼承self,再定義一個主函數main繼承self。準備url地址和請求頭headers。
import requests
from lxml import etree
import time
class ImageSpider(object):
def __init__(self):
self.firsr_url = "https://www.netbian.com/s/wangzherongyao/index.htm"
self.url = "https://www.netbian.com/s/wangzherongyao/index_{}.htm"
self.headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
}
def main(self):
pass
if __name__ == '__main__':
spider= ImageSpider()
spider.main()
'''發送請求 獲取響應'''
def get_page(self, url):
res = requests.get(url=url, headers=self.headers)
html = res.content.decode("gbk") #網絡編碼
return html #返回值
'''解析數據'''
def parse_page(self, html):
parse_html = etree.HTML(html)
image_src_list = parse_html.xpath('//div[@class="list"]/ul/li/a//@href')
for image_src in image_src_list:
fa = "https://www.netbian.com" + image_src
# print(fa)
4、在谷歌瀏覽器上,右鍵選擇開發者工具或者按F12。
5、右鍵檢查,找到圖片二級的頁面的鏈接,如下圖所示。
6、對二級頁面發生請求,for遍歷得到的網址。
bimg_url = parse_html1.xpath('//div[@class="pic-down"]/a/@href')
for i in bimg_url:
diet = "https://www.netbian.com" + i
# print(diet)
html2 = self.get_page(diet)
parse_html2 = etree.HTML(html2)
# print(parse_html2)
url2 = parse_html2.xpath('//table[@id="endimg"]//tr//td//a/img/@src')
7、將獲取的圖片寫入文檔,獲取圖片的title值作為圖片的命名。
filename = parse_html2.xpath('//table[@id="endimg"]//tr//td//a/@title')
for e in filename:
# print(e)
dirname = "./王者榮耀/" + e + '.jpg'
html2 = requests.get(url=r, headers=self.headers).content
# print(html2)
print(dirname)
with open(dirname, 'wb') as f:
f.write(html2)
print("%s下載成功" % filename)
8、在main方法調用,如下所示。因為第一頁的網址是沒有規律的,所以這裏先判斷一下是不是第一頁。
startPage = int(input("起始頁:"))
endPage = int(input("終止頁:"))
for page in range(startPage, endPage + 1):
if page == 1:
url = self.firsr_url
else:
url = self.url.format(page)
# print(url)
html = self.get_page(url)
print("第%s頁爬取成功!!!!" % page)
# print(html)
self.parse_page(html)
【六、效果展示】
1、運行程序,在控制枱輸入你要爬取的頁數,如下圖所示。
2、將下載成功的圖片信息顯示在控制枱,如下圖所示。
3、在本地可以看到效果圖,如下圖所示。
【七、總結】
1、不建議抓取太多數據,容易對服務器造成負載,淺嘗輒止即可。
2、希望通過這個項目,能夠幫助大家下載高清的圖片。
3、本文基於Python網絡爬蟲,利用爬蟲庫,實現王者榮耀圖片的抓取。實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。
4、英雄有很多,大家自行選擇你喜歡的英雄做為你的桌面的壁紙吧。
5、需要本文源碼的小夥伴,後台回覆“王者榮耀”四個字,即可獲取。
看完本文有收穫?請轉發分享給更多的人
IT共享之家
入羣請在微信後台回覆【入羣】
責任編輯: