python - 如何提取整个表并将其存储在 CSV 文件中?
问题描述
我正在尝试抓取整个表格并希望将其存储在 .csv 文件中。当我试图抓取这些数据时,它显示错误为NO TABLES FOUND。
这是我的代码。
from pandas.io.html import read_html
page = 'https://games.crossfit.com/leaderboard/open/2020?view=0&division=1&scaled=0&sort=0'
tables = read_html(page, attrs={"class":"desktop athletes"})
print ("Extracted {num} tables".format(num=len(tables)))
任何建议或指导或任何帮助?
解决方案
此页面用于JavaScript
从服务器获取数据并生成表格。
但是DevTool
在 Chrome/Firefox 中使用,您可以看到(在 tab 中Network
)从浏览器到服务器的所有请求,其中一个XHR/AJAX
请求以格式获取所有数据,JSON
因此您也可以使用此 url 来获取它,JSON
因为您可以将其转换为 Python 数据并且您不需要不必刮。
import requests
r = requests.get('https://games.crossfit.com/competitions/api/v1/competitions/open/2020/leaderboards?view=0&division=1&scaled=0&sort=0')
data = r.json()
for row in data['leaderboardRows']:
print(row['entrant']['competitorName'], row['overallScore'], [(x['rank'],x['scoreDisplay']) for x in row['scores']])
结果
Patrick Vellner 64 [('13', '8:38'), ('19', '988 reps'), ('12', '6:29'), ('18', '16:29'), ('2', '10:09')]
Mathew Fraser 74 [('8', '8:28'), ('40', '959 reps'), ('3', '6:08'), ('2', '14:22'), ('21', '10:45')]
Lefteris Theofanidis 94 [('1', '8:05'), ('3', '1021 reps'), ('13', '6:32'), ('4', '15:00'), ('73', '11:11')]
# ... more ...
推荐阅读
- javascript - 打开其他菜单时如何折叠 Vanilla JS 多级菜单
- sikuli - 斯库里无故打开windows开始菜单
- java - 如何从netbeans上的服务器连接mysql数据库
- sharepoint - 我希望将 1500 多个用户 OneDrive 数据迁移到在线 SharePoint
- hyperledger-fabric - 当 stateDB 之一被篡改时检查 Hyperledger Fabric 的行为
- python - 计算 Python pandas 中两个特定行之间的百分比差异
- next.js - Nextjs SWR 为什么数据没有呈现在屏幕上
- python - 如何通过匿名连接向 ldap 服务器添加详细信息?
- python - 从 Statmodel OLS 回归摘要中提取 R 平方
- python - 在 bitbucket 中找不到 terraform