如何从CGI网站抓取表格数据并转换为DataFrame?
解决CGI页面网球数据抓取问题
问题说明
需要从指定CGI页面抓取网球数据,使用Jupyter Notebook的Python库,尝试给定代码后无法获取有效表格,得到的结果是无效空数据和导航栏内容。
问题原因
原代码直接获取页面所有<table>标签后取索引为1的表格,但该索引对应的并非目标数据表格;同时请求头的User-Agent过于简单,可能导致页面返回内容不全。
解决代码
import requests from bs4 import BeautifulSoup import pandas as pd # 使用贴近真实浏览器的User-Agent headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } url = "https://www.tennisabstract.com/cgi-bin/leaders.cgi" # 发送请求并检查状态 response = requests.get(url, headers=headers) response.raise_for_status() # 解析页面,精准定位目标数据表格 soup = BeautifulSoup(response.text, "lxml") target_table = soup.find("table", class_="stats") # 转换表格为DataFrame并显示 df = pd.read_html(str(target_table))[0] pd.set_option('display.max_rows', None) df
关键调整说明
- 替换为真实浏览器的User-Agent,确保服务器返回完整页面内容;
- 通过
class_="stats"精准定位存储网球数据的目标表格,避免解析无效表格; - 加入
response.raise_for_status(),快速排查请求失败类问题。
内容的提问来源于stack exchange,提问作者Lavacave
相关产品推荐
相关产品推荐

