2015-12-21 63 views
0

這是我在一週前發佈的一個問題的擴展(getting text from html using beatifulsoup)。 似乎我想提取的大部分數據是data-bind,並且當我使用soup.findAll時不會「存儲」。例如考慮這個鏈接:kaggle/user/results我想要獲得用戶參與的所有比賽的名稱。我使用下面的代碼:Python:使用BeatifulSoup從數據綁定中獲取數據

url = 'https://www.kaggle.com/titericz/results' 
sourceCode = requests.get(url) 
plainText = sourceCode.text 
soup = BeautifulSoup(plainText) 
for link in soup.findAll('tr'): 
    print(link) 

所以我把第一場比賽,但在link似乎競爭,在這種競爭中的地位,總競爭對手等的名稱的值丟失,而在HTML是那裏。試圖按照與上面鏈接的問題的答案相同的程序,但我無法管理它(通過使用re.compilepattern.search)。有沒有辦法通過使用BeatifulSoup來完成它?我無法在網上找到任何類似的問題。

+1

豈不是更好,如果你只使用基本的GET請求,我猜這就是它。 https://www.kaggle.com/scripts/all/0?userId=54836&sortBy=votes –

+0

感謝您的答案。你能更清楚嗎?我應該遵循什麼程序? –

+0

你可以直接從網址https://www.kaggle.com/knockout/profiles/54836/results以json的形式獲取數據並解析它[用python解析json](https://docs.python.org/2 /library/json.html)。在這種情況下,你不需要美麗的裝備 –

回答

2

你可以解析底層的get請求,它返回一個json字符串。

這裏有一個小腳本,它會幫助你開始。

import requests 
import json 

jsonResponse = requests.get("https://www.kaggle.com/knockout/profiles/54836/results") 
data = json.loads(jsonResponse.text) 
print(data) 

for eachData in data: 
    print("competition name:", eachData["competition"]["title"]) 
    print("Rank:", eachData["rank"]) 
    print("competitors count:", eachData["teamCount"]) 

輸出將是以下格式:

competition name: Digit Recognizer 
Rank: None 
competitors count: 933 
competition name: The Allen AI Science Challenge 
Rank: 110 
competitors count: 486 
+0

我正要發佈類似的答案。我猜你比較快。 :P –