2016-11-25 70 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