python爬取王者皮肤_Python爬取王者荣耀英雄皮肤高清图片
前言
臨下班前,看到群里有人在討論用王者農藥的一些皮膚作為電腦的壁紙,什么高清的,什么像素稍低的,網上查了一手,也有,但像素都不一樣,所以,我就想著,自己去官網直接爬他的高清皮膚就好了,然后就有了這邊文章說的主題了。
爬圖思路
找到英雄列表
進入官網,然后進入英雄介紹,查看更多英雄,就能看到全部的英雄了,也就是下面的這個鏈接
英雄詳情
點擊每個英雄進來,就可以看到每個英雄的詳細信息,基本介紹以及皮膚展示,而我們需要爬取的皮膚,就在右下角那里,鼠標放上去,就可以逐個展示該皮膚了
分析皮膚圖片URL
從上面的這張魯班的圖片中我們可以看到,通過F12定位到皮膚的小圖片位置,li元素里有一個img的元素,其中img的src和data-imgname這兩個屬性,查看一下,就不難知道,src的屬性值是小圖,而data-imgname則是我們需要的大圖URL,但是查看源碼,就會發現,在html中,并沒有這個屬性,所以,需要我們分析這個URL的規律來得到其他英雄的皮膚圖片,分析也不難發現,112就是英雄的id,而bigskin-2里面的2即表示這個英雄的第幾張皮膚圖片
開始編寫爬蟲腳本
第一步:定義一些常用變量
第二步:抓取所有英雄列表
第三步:循環遍歷,分析每個英雄皮膚節點
第四步:下載圖片
第五步:爬蟲結束
完整源碼
感覺上面七七八八的,說了些啥呀,真是墨跡,還不如直接上代碼實在,好吧,我錯了,馬上交出源碼,請各路豪杰女俠饒恕,同時,代碼我也上傳了交友網站GitHub。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
抓取王者榮耀皮膚
author: gxcuizy
date: 2018-11-06
"""
import requests
from bs4 import BeautifulSoup
from urllib import parse
import os
class Skin(object):
def __init__(self):
# 英雄的json數據
self.hero_url = 'https://pvp.qq.com/web201605/js/herolist.json'
# 英雄詳細頁的通用url前綴信息
self.base_url = 'https://pvp.qq.com/web201605/herodetail/'
# 英雄詳細頁url后綴信息
self.detail_url = ''
# 圖片存儲文件夾
self.img_folder = 'skin'
# 圖片url的通用前綴
self.skin_url = 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'
# 圖片url的后綴信息
self.skin_detail_url = ''
def get_hero(self):
"""獲取英雄的json數據"""
request = requests.get(self.hero_url)
hero_list = request.json()
return hero_list
def get_hero_skin(self, hero_name, hero_no):
"""獲取詳細頁英雄皮膚展示的信息,并爬圖"""
url = parse.urljoin(self.base_url, self.detail_url)
request = requests.get(url)
request.encoding = 'gbk'
html = request.text
# 獲取皮膚信息的節點
soup = BeautifulSoup(html, 'lxml')
skip_list = soup.select('.pic-pf-list3')
for skin_info in skip_list:
# 獲取皮膚名稱
img_names = skin_info.attrs['data-imgname']
name_list = img_names.split('|')
skin_no = 1
# 循環下載皮膚圖片
for skin_name in name_list:
self.skin_detail_url = '%s/%s-bigskin-%s.jpg' % (hero_no, hero_no, skin_no)
skin_no += 1
img_name = hero_name + '-' + skin_name + '.jpg'
self.download_skin(img_name)
def download_skin(self, img_name):
"""下載皮膚圖片"""
img_url = parse.urljoin(self.skin_url, self.skin_detail_url)
request = requests.get(img_url)
if request.status_code == 200:
print('download-%s' % img_name)
img_path = os.path.join(self.img_folder, img_name)
with open(img_path, 'wb') as img:
img.write(request.content)
else:
print('img error!')
def make_folder(self):
"""創建圖片存儲文件夾"""
if not os.path.exists(self.img_folder):
os.mkdir(self.img_folder)
def run(self):
"""腳本執行入口"""
self.make_folder()
hero_list = self.get_hero()
for hero in hero_list:
hero_no = str(hero['ename'])
self.detail_url = hero_no + '.shtml'
hero_name = hero['cname']
self.get_hero_skin(hero_name, hero_no)
# 程序執行入口
if __name__ == '__main__':
skin = Skin()
skin.run()
復制代碼
最后
其實思路就是這么簡單,當然了,如果有其他思路以及想法的,歡迎留言交流。額,差點忘了,大家有興趣的,可以嘗試一下爬取英雄聯盟的所有英雄皮膚高清圖片,有其他任何問題,也歡迎留言和交流。
總結
以上是生活随笔為你收集整理的python爬取王者皮肤_Python爬取王者荣耀英雄皮肤高清图片的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 原来带有python又装了一个anaco
- 下一篇: python怎么删除列表创建_Pytho