我想从这个页面刮出网球数据:https://www.tennisabstract.com/cgi-bin/leaders.cgi 一个任务

我需要在Python Notebook中使用Python库.

当我试图抓取这个.cgi页面时,我无法从表中获取任何数据.有没有一种方法可以抓取一个.cgi页面?

我try 的代码是:

    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页面上的其他表:

0 1
0 &nbsp Stats: Serve | Return | Breaks | More
1 nan nan
2 nan nan

推荐答案

数据是由JavaScript动态加载和呈现的,因此您将无法从该ressource上的静态响应中获取表.

  1. 你可以try 从https://www.minorleaguesplits.com/tennisabstract/cgi-bin/jsmatches/leadersource.js

  2. 你可以try 用例如selenium来模拟浏览器,并使用呈现的源代码版本

Example
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 Player M M W-L M W% SPW SPW-InP Aces Ace% DFs DF% DF/2s 1stIn 1st% 2nd% 2%-InP Hld% Pts/SG PtsL/SG
0 1 Novak Djokovic [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 [ITA] 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 Carlos Alcaraz [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 Zhizhen Zhang [CHN] 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 Daniel Evans [GBR] 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 nan Average nan nan 61.2% 65.7% 64.8% nan 8.6% nan 3.3% 9.0% 62.8% 73.7% 52.2% 57.3% 83.2% 6.3 2.2

Python相关问答推荐

如何在Python中使用时区夏令时获取任何给定本地时间的纪元值?

使用LineConnection动画1D数据

返回nxon矩阵的diag元素,而不使用for循环

理解Python的二分库:澄清bisect_left的使用

2维数组9x9,不使用numpy.数组(MutableSequence的子类)

Django管理面板显示字段最大长度而不是字段名称

当使用keras.utils.Image_dataset_from_directory仅加载测试数据集时,结果不同

scikit-learn导入无法导入名称METRIC_MAPPING64'

Python中绕y轴曲线的旋转

如何使用它?

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

导入...从...混乱

索引到 torch 张量,沿轴具有可变长度索引

如何在TensorFlow中分类多个类

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

Odoo16:模板中使用的docs变量在哪里定义?

查看pandas字符列是否在字符串列中

Django Table—如果项目是唯一的,则单行

比较两个有条件的数据帧并删除所有不合格的数据帧

我如何处理超类和子类的情况