首页 > 解决方案 > 在 Python 中一次抓取多个数据表

问题描述

我正在使用以下 NCAA 统计网站并希望从中获取数据:

https://stats.ncaa.org/rankings/change_sport_year_div

要获取我要抓取的具体数据,请单击链接,选择男子篮球运动,2019-2020 年和 Division III,然后单击球队统计按钮。在浏览了 html 之后,我能够从下拉菜单中找到我想要的所有统计信息。我想知道是否有可能使用 BeautifulSoup(甚至可能是 pd.read_html())来为每个类别抓取一个表。似乎我可能需要的所有信息都在下图中,但我不太确定如何实现 python 的工具来大写。这将比手动下载每个统计数据的 excel 表并将它们读入 pandas 更有效(并且不那么无聊)。谢谢你。

在此处输入图像描述

标签: pythonhtmlpandasweb-scrapingbeautifulsoup

解决方案


检查您的情况,您应该使用一些表单数据向给定的 url 发出 post 请求,如下所示:

sport_code: MBB
academic_year: 2020.0
division: 3.0
ranking_period: 110.0
team_individual: T
game_high: N
ranking_summary: N

sport_code=MBB&academic_year=2020.0&division=3.0&ranking_period=110.0&team_individual=T&game_high=N&ranking_summary=N

如上所示格式化表单数据并调用curl,

curl -X POST -d "@formdata.txt" https://stats.ncaa.org/rankings/change_sport_year_div

如果你愿意,你也可以对requests模块做同样的事情,只要确保表单数据的格式正确。

r = requests.post("https://stats.ncaa.org/rankings/change_sport_year_div",
                  data={"sport_code": "MBB",
                        "academic_year": 2020.0,
                        "division": 3.0,
                        "ranking_period": 110.0,
                        "team_individual": "T",
                        "game_high": "N",
                        "ranking_summary": "N"})

推荐阅读