2016-11-25 118 views
0

對不起,如果這不是這個問題的地方,但我不知道還有別的問題。用Python颳去Web數據

我試圖抓取rotogrinders.com的數據,我遇到了一些挑戰。

我特別希望能夠湊使用此格式的網址前面的NHL比賽數據(很明顯,你可以改變一天的數據的日期): https://rotogrinders.com/game-stats/nhl-skater?site=draftkings&date=11-22-2016

然而,當我到達的頁面,我注意到數據被分解爲多個頁面,我不確定該怎麼做才能讓我的腳本在點擊頁面底部的「全部」按鈕之後獲取所呈現的數據。

有沒有辦法在Python中做到這一點?也許一些圖書館,將允許按鈕點擊?或者有什麼方法可以在不實際點擊按鈕的情況下獲取數據,方法是巧妙地使用URL /請求?

+0

硒。 –

+0

到目前爲止,你做了什麼,如果你顯示一些代碼或試圖做任務的人更願意幫助。 – Dalvenjia

回答

1

事實上,在這種情況下事情並不那麼複雜。當您單擊「全部」時,不會發出網絡請求。所有數據已經存在 - 在HTML中的script標記內,您只需要提取它。

使用requests(下載網頁內容),BeautifulSoup(解析HTML和定位所需script元件),re(提取從腳本期望的「播放器」陣列)和json(加載陣列工作碼字符串轉換成Python列表):

import json 
import re 

import requests 
from bs4 import BeautifulSoup 

url = "https://rotogrinders.com/game-stats/nhl-skater?site=draftkings&date=11-22-2016" 
response = requests.get(url) 

soup = BeautifulSoup(response.content, "html.parser") 
pattern = re.compile(r"var data = (\[.*?\]);$", re.MULTILINE | re.DOTALL) 

script = soup.find("script", text=pattern) 

data = pattern.search(script.text).group(1) 
data = json.loads(data) 

# printing player names for demonstration purposes 
for player in data: 
    print(player["player"]) 

版畫: 「也許某些庫,將允許按鈕點擊」

Jeff Skinner 
Jordan Staal 
... 
William Carrier 
A.J. Greer 
+0

非常感謝! 我曾聽說過BeautifulSoup,但之前使用過它的運氣並不多。顯然,我需要閱讀更多的文檔,才能真正掌握它所能做的一切。 再次感謝您的幫助 – TrolliOlli