可以用python寫網頁嗎,有關python的比賽_用 Python 寫一個 Kaggle 比賽排行榜的爬蟲
可以用python寫網頁嗎,有關python的比賽_用 Python 寫一個 Kaggle 比賽排行榜的爬蟲
長久以來,我和小伙伴們都被 Kaggle 網站的加載速度困擾著,比如最近在用 Kaggle 上的數據集測試模型效果時,遇到排行榜(Leaderboard)刷新困難的問題。于是我們開始探索解決方案。
首先嘗試直接使用頁面鏈接進行數據爬取,很明顯爬不到,因為 Kaggle 的數據是異步響應的。于是我打開 Leaderboard 頁面的開發者工具,以著名的 Titanic 競賽的排行榜為例,打開 Network 選項,查看 XHR 項,然后 ctrl+R 刷新頁面,可以看到如下列表:
我用紅框圈起來的這個就是我們要找的排行榜數據,點擊它后可以看到它的 Request URL 如下:
然后把這個鏈接復制到瀏覽器打開,就可以看到一大段 JSON 形式的排行榜數據:
這里推薦使用在線 JSON 校驗格式化工具 Be JSON 來將這些數據重新排版,只需要粘貼過去使用“格式化校驗”功能,就可以通過更好的排版方式來查看數據了。然后我們很容易看出,整個結果是一個大的字典,里面包含著小字典:submissions:其中又包含若干個小字典,每個字典存儲一個隊伍的信息及其戰績,包括名次、隊名、分數、提交次數、最后一次提交時間等
beforeUser:包含前50名隊伍的信息及戰績
可以用python寫網頁嗎。afterUser:包含50名以后的全部隊伍信息及戰績
而我們只需要解析出 beforeUser 和 afterUser 中的數據就可以了,下面是具體的實現過程。
首先確定自己想要抓取 public 榜還是 private 榜,只有已經結束的比賽才公開了 private 榜,否則只能抓到 public 榜。具體抓數據代碼如下:
import urllib3 # pip install -i https://pypi.anaconda.org/pypi/simple urllib3
青少年python編程競賽,if type == 'public':
url = 'https://www.kaggle.com/c/{competition}/leaderboard.json?includeBeforeUser=true&includeAfterUser=true'.format(
competition=competition)
elif type == 'private':
爬蟲比賽?url = 'https://www.kaggle.com/c/{competition}/leaderboard.json?includeBeforeUser=true&includeAfterUser=true&type=private'.format(
competition=competition)
else:
print('榜單類型有誤,請檢查')
python和c++學哪個好,http = urllib3.PoolManager()
response = http.request('GET', url)
然后對抓取到的數據進行解析,取出我們需要的信息,構成更易讀的 dataframe 形式:
import pandas as pd
編程比賽,import json
ranks0 = str(response.data).replace("\\", "")
ranks1 = json.loads(ranks0[2:-1])['beforeUser']
ranks2 = json.loads(ranks0[2:-1])['afterUser']
用python寫一個網站、ranks = ranks1 + ranks2
team_list = list(ranks)
rank_score = pd.DataFrame(columns=['rank', 'teamName', 'entries', 'lastSubmission', 'score'])
for team in team_list:
用python寫網絡爬蟲、rank = team.get('rank')
teamName = team.get('teamName')
entries = team.get('entries')
lastSubmission = team.get('lastSubmission')
python競賽、score = team.get('score')
rank_score = rank_score.append(
{'rank': rank, 'teamName': teamName, 'entries': entries, 'lastSubmission': lastSubmission, 'score': score},
ignore_index=True)
rank_score
至此,我們就得到一個比賽的全部排行榜數據啦,封裝好的代碼請移步 Github,下載項目后直接在命令行執行:
python main.py titanic private
或
python main.py titanic public
就可以把排行榜數據作為 csv 文件存到本地啦。
分享更多關于數據挖掘的有趣內容,歡迎大家關注公眾號「數據池塘」: