本文目錄一覽:
python爬蟲—爬取LOL雲頂之弈數據
本來是想爬取之後作最佳羈絆組合推算,但是遇到知識點無法消化(知識圖譜),所以暫時先不組合了,實力有限
庫的安裝
1.requests #爬取棋子數據
2.json #棋子數據為js動態,需使用json解析
3.BeautifulSoup
實戰前先新建個lol文件夾作為工作目錄,並創建子目錄data,用於存放數據。
1.爬取數據,新建個py文件,用於爬取雲頂數據,命名為data.py
1.1定義個req函數,方便讀取。//需設定編碼格式,否則會出現亂碼
def Re_data(url):
re = requests.get(url)
re.encoding = ‘gbk’
data = json.loads(re.text)
return data[‘data’]
1.2定義個Get函數,用於讀取數據並使用保存函數進行保存數據,保存格式為json。
def Get_data():
# 獲取數據並保存至data目錄
base_url = ”
chess = Re_data(base_url + ‘chess.js’)
race = Re_data(base_url + ‘race.js’)
job = Re_data(base_url + ‘job.js’)
equip = Re_data(base_url + ‘equip.js’)
Save_data(chess,race,job,equip)
1.3定義save函數實現讀取的數據進行文件保存,保存目錄為工作目錄下的data文件夾。
def Save_data(t_chess,t_race,t_job,t_equip):
with open(‘./data/chess.json’,’w’) as f:
json.dump(t_chess,f,indent=’\t’)
with open(‘./data/race.json’,’w’) as f:
json.dump(t_race,f,indent=’\t’)
with open(‘./data/job.json’,’w’) as f:
json.dump(t_job,f,indent=’\t’)
with open(‘./data/equip.json’,’w’) as f:
json.dump(t_equip,f,indent=’\t’)
1.4定義主函數main跑起來
if __name__ == ‘__main__’:
start = time.time()
Get_data()
print(‘運行時間:’ + str(time.time() – start) + ‘秒’)
至此,數據爬取完成。
2.種族和職業進行組合。
2.1未完成 //未完成,使用窮舉方法進行組合會出現內存不夠導致組合失敗(for循環嵌套導致數組內存超限)
//待學習,使用知識圖譜建立組合優選,可參考:
期間遇到的問題:
1.爬取棋子數據時為動態js載入,需通過json模塊的loads方法獲取
2.3層for循環嵌套數據量大,導致計算失敗,需優化計算方法。
如何用Python爬蟲抓取JS動態篩選內容
打開瀏覽器,以google chrome為例,輸入你上面的網址。
然後按F12打開調試窗口,然後嘗試勾選左邊某一個選項,馬上可以看到右邊的調試窗口有東西輸出。
找到第一個輸出的行,點擊header,可以看到每一個都是用的post方法。
所以只需要構造相應的header並post上去,就可以得到你想要的數據了。
嘗試每一個request都點開看一下
就是你要構造的數據
FormData就是你要構造的數據
把數據構造好然後使用post函數發送給網站
這個得到的是一個網頁格式的數據。
而這個發放返回的是json數據,然後編碼成dict格式 提取出數據就可以了。
python 有幾種方法可以獲取js動態源碼。 用哪種方法好
最好的方法就是使用selenium這種庫哦。簡單介紹一下selenium,這本身是一種網站自動測試的庫,所以可以模擬用戶的所有交互行為,包括輸入、點擊、拖拉、滾動等等和用戶完全相同的操作,所以也和真正打開網頁一樣,可以響應Javascript的行為,可以載入JS非同步載入的網頁。selenium最好配合PhantomJS使用,這樣就沒有界面,完全自動處理哦。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/306259.html