Python爬蟲獲取op.gg英雄聯盟英雄對位勝率的源碼

通過第三方BeautifulSoup庫來爬取op.gg網頁靜態數據

主要思路

op.gg網站

網站以出場率高低排名,並且列出對位勝率,在高出場率的前提下,勝率有很大的參考意義,在counter位很有幫助

網站以出場率高低排名,並且列出對位勝率,在高出場率的前提下,勝率有很大的參考意義,在counter位很有幫助

在這裡插入圖片描述

通過開發者工具找到對應部位源碼,發現數據就在源碼中,證明這是一個靜態數據,確定使用BeautifulSoup庫。

源碼

import requests
from bs4 import BeautifulSoup

championname={'阿卡麗 ':'akali','牛頭':'alistar','阿木木':'amumu','冰鳥':'anivia','安妮':'annie','艾希':'ashe','機器人':'blitzcrank','火男':'brand','女警':'caitlyn',
    '蛇女':'cassiopeia','大蟲子':'chogath','飛機':'corki','諾手':'darius','皎月':'diana','蒙多':'drmundo','德萊文':'delevin','蜘蛛':'elise',
    '寡婦':'evelynn','ez':'ezreal','稻草人':'fiddlesticks','劍姬':'fiora','魚人':'fizz','加裡奧':'galio','船長':'gangplank','蓋倫':'garen',
    '酒桶':'gragas','人馬':'hecarim','大頭':'heimerdinger','刀妹':'irelia','鳳女':'janna','皇子':'jarvaniv','賈克斯':'jax','傑斯':'jayce','卡爾瑪':'karma',
    '死歌':'karthus','卡薩丁':'kassadin','卡特':'katarina','天使':'kayle','凱南':'kennen','螳螂':'khazix','大嘴':'kogmaw','妖姬':'leblanc','盲僧':'leesin','女坦':'Leona','露露':'lulu','拉克絲':'Lux',
    '石頭人':'Malphite','馬爾紮哈':'Malzahar','大樹':'Maokai','劍聖':'Yi','女槍':'MissFortune','猴子':'Monkeyking','鐵男':'Mordekaiser','莫甘娜':'Morgana'
    ,'娜美':'Nami','狗頭':'Nasus','泰坦':'Nautilus','豹女':'Nidalee','夢魘':'Nocturne','雪人':'Nunu','奧拉夫':'Olaf','發條':'Orianna','潘森':'Pantheon','波比':'Poopy','龍龜':'Rammus','鱷魚':'Renekton','獅子狗':'Rengar',
    '瑞文':'Rivan','蘭博':'Rumble','瑞茲':'Ryze','豬女':'Sejuani','小醜':'Shaco','慎':'Shen','龍女':'Shyvana','煉金':'Singed','塞恩':'Sion','希維爾':'Sivir','蠍子':'Skarner','琴女':'Sona','奶媽':'Soraka','烏鴉':'Swain','辛德拉':'Syndra'
    ,'男刀':'Talon','寶石':'Taric','提莫':'Teemo','錘石':'Thresh','小炮':'Tristana','巨魔':'Trundle','蠻王':'Tryndamere','卡牌':'TwistedFate','老鼠':'Twitch','烏迪爾':'Udyr','厄加特':'Urgot','維魯斯':'Varus','薇恩':'Vayne',
    '小法':'Veigar','蔚':'Vi','維克托':'Viktor','吸血鬼':'Vladimir','狗熊':'Volibear','狼人':'Warwick','澤拉斯':'Xerath','趙信':'XinZhao','掘墓':'Yorick','劫':'Zed','炸彈人':'Ziggs','時光':'Zilean','婕拉':'Zyra','佐伊':'zoe','永恩':'yone','薩米拉':'samira','亞索':'yasuo',
    '塞拉斯':'sylas','盧錫安':'lucian','艾克':'ekko','阿貍':'ahri','瑟提':'sett','奇亞娜':'qiyana','龍王':'aurelionsol','克烈':'kled','妮蔻':'neeko'

  }
position_all = {'top':'top','jun':'jungle','mid':'mid','ad':'bot','sup':'support'}
#由於網站反爬蟲機制,使用請求通來偽裝成瀏覽器,否則會被檢測為爬蟲,爬取數據失敗
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36'}
name_input = input('輸入名字:')
myname = championname[name_input]
myposition = input('輸入位置:')
position = position_all[myposition]
print('正在查詢,請稍等~~~')
#向url發出請求,將請求頭傳入,返回結果保留在res中,res為response對象
res = requests.get('http://www.op.gg/champion/{}/statistics/{}/matchup'.format(myname,position),headers=headers)
#res.text是要解析的網頁源代碼,html。parser是python的解析器
soup = BeautifulSoup(res.text,'html.parser')

#find方法返回tag對象,find_all返回有tag對象組成的列表,tag是BeautifSoup中的對象
#查找class屬性為champion-matchup-champion-list__item的div標簽,組成名為items的列表
items = soup.find_all('div',class_='champion-matchup-champion-list__item')

print('英雄 勝率')

for i in items:
 #div中的data-champion-name屬性值為英雄名字
 name = i['data-champion-name']
 #div屬性中的data-value-winrate屬性值為查找的英雄勝率,這裡轉換為供選擇的英雄勝率
 rate = 1-float(i['data-value-winrate'])
 print(name,'{}%'.format(round(rate*100,2)))

由於網址為英文,英雄英文名字個別十分難記難拼,所以我在字典中以中文名或者耳熟能詳的外號為key,以url中英雄英文名為value,進行輸入轉換。
位置使用top,jun,mid,ad,sup方便輸入。

到此這篇關於Python爬蟲獲取op.gg英雄聯盟英雄對位勝率的源碼的文章就介紹到這瞭,更多相關Python爬蟲英雄聯盟內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: