申明:資料來源于網路及書本,通過理解、實踐、整理成學習筆記,
文章目錄
- 英雄聯盟官網
- 獲取一個位置的綜合排行榜所有資料(上單為例)
- 獲取所有位置的綜合排行榜所有資料
英雄聯盟官網

獲取一個位置的綜合排行榜所有資料(上單為例)
以上單排行榜為例:
- 1、使用谷歌的無頭瀏覽器訪問該網頁
url = 'http://lol.qq.com/guides/hero.shtml?ADTAG=cooperation.glzx.web' # 創建一個引數物件,用來控制chrome以無界面的方式打開 options = Options() # 后面的兩個是固定寫法 必須這么寫 options.add_argument('--headless') options.add_argument('--disable-gpu') # 創建瀏覽器物件 driver = webdriver.Chrome(options=options) driver.get(url) - 2、獲取上單的所有資料進行資料處理
# 獲取上單英雄的所有資料 driver.find_element(By.XPATH, '//a[@data-types="top"]').click() element = driver.find_element(By.ID, 'rankTable') data = element.text.split('\n') data.pop(0) - 3、創建一個excel表格并寫入第一行資料
# 新建一個作業簿 wb = Workbook() ws1 = wb.active # 更改sheet名稱 ws1.title = '上單英雄' # excel表單第一行 first_line = ('排名', '排名波動', '英雄', '位置', '勝率', '登場率') for i in range(len(first_line)): ws1.cell(1, i + 1, first_line[i]) - 4、處理空值,網頁資訊中的英雄排名波動有部分英雄是沒有值的,這會影響到我們后面批量處理獲得的資料,所以我們可以按照索引添加資料0

創建一個串列,將有空值的索引添加進去,并在該位置插入資料0# 排名波動空值 employ = [28, 43] for i in range(46): if i in employ: data.insert(i * 5 + 1, '0') - 5、將所有獲得的資料分別保存至變數
# 將獲取的資料進行處理并保存 rank = data[i * 5] rank_float = data[i * 5 + 1] hero = data[i * 5 + 2] location = data[i * 5 + 3] win_rate = data[i * 5 + 4].split(' ')[0] appearance_rate = data[i * 5 + 4].split(' ')[1] - 6、將所有資料保存到excel表,并保存到本地
# 將資料寫入excel表格 ws1.cell(i + 2, 1, rank) ws1.cell(i + 2, 2, rank_float) ws1.cell(i + 2, 3, hero) ws1.cell(i + 2, 4, location) ws1.cell(i + 2, 5, win_rate) ws1.cell(i + 2, 6, appearance_rate) # 保存excel表 wb_name = '英雄聯盟上單英雄總和排行榜資料.xlsx' wb.save(wb_name) - 7、完整代碼如下
from openpyxl import Workbook from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By url = 'http://lol.qq.com/guides/hero.shtml?ADTAG=cooperation.glzx.web' # 創建一個引數物件,用來控制chrome以無界面的方式打開 options = Options() # 后面的兩個是固定寫法 必須這么寫 options.add_argument('--headless') options.add_argument('--disable-gpu') # 創建瀏覽器物件 driver = webdriver.Chrome(options=options) driver.get(url) driver.implicitly_wait(10) # 新建一個作業簿 wb = Workbook() ws1 = wb.active ws1.title = '上單英雄' # excel表單第一行 first_line = ('排名', '排名波動', '英雄', '位置', '勝率', '登場率') for i in range(len(first_line)): ws1.cell(1, i + 1, first_line[i]) # 獲取上單英雄的所有資料 driver.find_element(By.XPATH, '//a[@data-types="top"]').click() element = driver.find_element(By.ID, 'rankTable') data = element.text.split('\n') data.pop(0) # 排名波動空值 employ = [28, 43] for i in range(46): if i in employ: data.insert(i * 5 + 1, '0') # 將獲取的資料進行處理并保存 rank = data[i * 5] rank_float = data[i * 5 + 1] hero = data[i * 5 + 2] location = data[i * 5 + 3] win_rate = data[i * 5 + 4].split(' ')[0] appearance_rate = data[i * 5 + 4].split(' ')[1] # 將資料寫入excel表格 ws1.cell(i + 2, 1, rank) ws1.cell(i + 2, 2, rank_float) ws1.cell(i + 2, 3, hero) ws1.cell(i + 2, 4, location) ws1.cell(i + 2, 5, win_rate) ws1.cell(i + 2, 6, appearance_rate) # 保存excel表 wb_name = '英雄聯盟上單英雄總和排行榜資料.xlsx' wb.save(wb_name) print(rank, rank_float, hero, location, win_rate, appearance_rate) - 8、運行結果


獲取所有位置的綜合排行榜所有資料
由于需要獲取所有位置的資料,如果依次獲取,會導致代碼量很大,可以使用for回圈加上if判斷獲取
完整代碼如下:
from openpyxl import Workbook
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
import time
class LOL:
def get_hero_info(self):
# LOL官網url
url = 'http://lol.qq.com/guides/hero.shtml?ADTAG=cooperation.glzx.web'
# 創建一個引數物件,用來控制chrome以無界面的方式打開
options = Options()
# 后面的兩個是固定寫法 必須這么寫
options.add_argument('--headless')
options.add_argument('--disable-gpu')
# 創建瀏覽器物件
driver = webdriver.Chrome(options=options)
driver.get(url)
driver.implicitly_wait(10)
# 新建一個作業簿
wb = Workbook()
for j in range(5):
# 獲取上單英雄時所要變更的變數
if j == 0:
self.ws = wb.active
self.ws.title = '上單英雄'
driver.find_element(By.XPATH, '//a[@data-types="top"]').click()
self.element = driver.find_element(By.ID, 'rankTable')
# 頁面中上單英雄排行波動為空值的索引
self.employ = [28, 43]
# 上單英雄排行總個數
self.num = 46
# 獲取打野英雄時所要變更的變數
elif j == 1:
# 創建第2個sheet表單并命名
self.ws = wb.create_sheet('打野英雄', index=1)
# 切換到打野英雄排行榜
driver.find_element(By.XPATH, '//a[@data-types="jungle"]').click()
self.element = driver.find_element(By.ID, 'rankTable')
# 頁面中打野英雄排行波動為空值的索引
self.employ = [1, 5, 20, 29, 35]
# 打野英雄排行總個數
self.num = 40
# 獲取中單英雄時所要變更的變數
elif j == 2:
# 創建第3個sheet表單并命名
self.ws = wb.create_sheet('中單英雄', index=2)
# 切換到中單英雄排行榜
driver.find_element(By.XPATH, '//a[@data-types="mid"]').click()
self.element = driver.find_element(By.ID, 'rankTable')
# 頁面中中單英雄排行波動為空值的索引
self.employ = [24, 59]
# 中單英雄排行總個數
self.num = 60
# 獲取下路英雄時所要變更的變數
elif j == 3:
# 創建第4個sheet表單并命名
self.ws = wb.create_sheet('下路英雄', index=3)
# 切換到下路英雄排行榜
driver.find_element(By.XPATH, '//a[@data-types="bottom"]').click()
self.element = driver.find_element(By.ID, 'rankTable')
# 頁面中下路英雄排行波動為空值的索引
self.employ = [12]
# 下路英雄排行總個數
self.num = 21
# 獲取輔助英雄時所要變更的變數
elif j == 4:
# 創建第5個sheet表單并命名
self.ws = wb.create_sheet('輔助英雄', index=4)
# 切換到輔助英雄排行榜
driver.find_element(By.XPATH, '//a[@data-types="support"]').click()
self.element = driver.find_element(By.ID, 'rankTable')
# 頁面中輔助英雄排行波動為空值的索引
self.employ = []
# 輔助英雄排行總個數
self.num = 37
# 處理資料
data = self.element.text.split('\n')
data.pop(0)
# excel表單第一行
first_line = ('排名', '排名波動', '英雄', '位置', '勝率', '登場率')
for i in range(len(first_line)):
self.ws.cell(1, i + 1, first_line[i])
time.sleep(1)
# 排名波動空值
for i in range(self.num):
if i in self.employ:
data.insert(i * 5 + 1, '0')
# 將獲取的資料進行處理并保存
rank = data[i * 5]
rank_float = data[i * 5 + 1]
hero = data[i * 5 + 2]
location = data[i * 5 + 3]
win_rate = data[i * 5 + 4].split(' ')[0]
appearance_rate = data[i * 5 + 4].split(' ')[1]
# 將資料寫入excel表格
self.ws.cell(i + 2, 1, rank)
self.ws.cell(i + 2, 2, rank_float)
self.ws.cell(i + 2, 3, hero)
self.ws.cell(i + 2, 4, location)
self.ws.cell(i + 2, 5, win_rate)
self.ws.cell(i + 2, 6, appearance_rate)
# 保存excel表
wb_name = '英雄聯盟資料.xlsx'
wb.save(wb_name)
print(rank, rank_float, hero, location, win_rate, appearance_rate)
if __name__ == '__main__':
LOL().get_hero_info()
運行結果:
- 上單英雄綜合排行榜資料

- 打野英雄綜合排行榜資料

- 中單英雄綜合排行榜資料

- 下路英雄綜合排行榜資料

- 輔助英雄綜合排行榜資料

Python爬蟲實戰專欄:
爬蟲實戰5:爬取全部穿越火線武器的圖片以武器名稱命名保存到本地檔案
爬蟲實戰6:爬取英雄聯盟官網五個位置的綜合排行榜保存到excel
爬蟲實戰7:更新中—
一個堅持學習,堅持成長,堅持分享的人,即使再不聰明,也一定會成為優秀的人!
如果看完覺得有所識訓的話,記得一鍵三連哦,謝謝大家!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/281640.html
標籤:python
