使用 Python 抓取 Web 数据

Scraping Web data with Python

抱歉,如果这不是回答这个问题的地方,但我不确定还有什么地方可以问。

我正在尝试从 rotogrinders.com 抓取数据,我 运行 遇到了一些挑战。

特别是,我希望能够使用这种格式的 url 抓取以前的 NHL 游戏数据(显然你可以更改其他日期数据的日期): https://rotogrinders.com/game-stats/nhl-skater?site=draftkings&date=11-22-2016

但是,当我进入该页面时,我注意到数据被分解成页面,我不确定如何让我的脚本获取单击 "all"按钮在页面底部。

在 python 中有没有办法做到这一点?也许有些图书馆允许点击按钮?或者有什么方法可以通过巧妙地了解 URL/request?

而无需实际单击按钮来获取数据

其实,在这种情况下,事情并没有那么复杂。当您单击 "All" 时,不会发出任何网络请求。所有 数据都已经存在 - 在 HTML 的 script 标签内,您只需要提取它即可。

使用 requests (to download the page content), BeautifulSoup 的工作代码(解析 HTML 并找到所需的 script 元素),re(从中提取所需的 "player" 数组脚本)和 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