我想从此页面抓取网球数据:https://www.tennisabstract.com/cgi-bin/leaders.cgi 任务。
我需要在 Jupyter Notebook 中使用
python
库。
当我尝试抓取此 .cgi 页面时,我无法从表中获取任何数据。有没有办法抓取 .cgi 页面?
我正在尝试的代码是:
url = "https://www.tennisabstract.com/cgi-bin/leaders.cgi"
response = requests.get(url, headers={"User-Agent": "XY"})
#response
page = response.content
scraping = BeautifulSoup(page, "lxml")
pd.set_option('display.max_rows', None)
table = BeautifulSoup(response.content, "lxml")
table = table.find_all("table")
df = pd.read_html(str(table))
df = df[1]
df
我得到的结果是(当我使用 df[0] 时它会发生变化,并且在 df[2] 处失败,这适用于网站中 HTML 页面上的其他表:
数据由 JavaScript 动态加载和呈现,因此您不会从该资源上的静态响应中获取表。
您可以尝试从https://www.minorleaguesplits.com/tennisabstract/cgi-bin/jsmatches/leadersource.js
获取并处理数据您可以尝试使用例如来模仿浏览器
selenium
并使用渲染的源代码版本
from selenium import webdriver
import pandas as pd
driver = webdriver.Chrome()
url = f'https://www.tennisabstract.com/cgi-bin/leaders.cgi'
driver.get(url)
pd.read_html(driver.page_source, attrs={'id':'matches'})[0]
Rk | 玩家 | M | M W-L | M W% | SPW | SPW-InP | 王牌 | 王牌% | DF | DF% | DF/2秒 | 第 1 次 | 第 1% | 第二% | 2%-InP | 持有% | 分/SG | PtsL/SG | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 诺瓦克·德约科维奇 [SRB] | 58 | 49-9 | 84.5% | 69.1% | 68.4% | 436 | 8.7% | 147 | 2.9% | 8.1% | 63.9% | 76.2% | 56.7% | 61.6% | 87.6% | 6.1 | 1.9 |
1 | 2 | Jannik Sinner [意大利] | 76 | 65-11 | 85.5% | 69.1% | 68.0% | 485 | 8.3% | 137 | 2.4% | 6.0% | 60.5% | 76.8% | 57.2% | 60.9% | 89.6% | 6.1 | 1.9 |
2 | 3 | 卡洛斯·阿尔卡拉斯 [ESP] | 76 | 62-14 | 81.6% | 67.2% | 67.3% | 319 | 5.6% | 160 | 2.8% | 8.3% | 66.1% | 72.6% | 56.8% | 61.9% | 85.9% | 6.2 | 2 |
... | |||||||||||||||||||
48 | 49 | 张志珍 [中国] | 50 | 26-24 | 52.0% | 64.5% | 63.3% | 340 | 8.3% | 119 | 2.9% | 8.0% | 63.9% | 72.0% | 51.2% | 55.6% | 80.7% | 6.3 | 2.2 |
49 | 50 | 丹尼尔·埃文斯 [英国] | 40 | 16-24 | 40.0% | 63.4% | 64.4% | 163 | 5.3% | 135 | 4.4% | 10.4% | 57.6% | 71.8% | 52.1% | 58.1% | 79.2% | 6.3 | 2.3 |
50 | 南 | 平均 | 南 | 南 | 61.2% | 65.7% | 64.8% | 南 | 8.6% | 南 | 3.3% | 9.0% | 62.8% | 73.7% | 52.2% | 57.3% | 83.2% | 6.3 | 2.2 |