首页 > 解决方案 > 使用 Python 自动按下按钮

问题描述

我已经尝试了一段时间来弄清楚如何在此页面上自动下载 csv: https ://razzball.com/mlbpitchingstats/

在顶部,您可以单击一个基本的 html 输入框,然后单击该框上的下载。我知道我可以弄清楚如何使用无头驱动程序执行此操作,但我一直在尝试弄清楚如何使用请求或以某种方式访问​​下载按钮侦听器。

监控网络选项卡时,似乎没有对 api 的请求。我是使用无头浏览器的唯一选择吗?有没有办法通过请求来解决这个问题?任何帮助都会很大!

标签: javascriptpythonhtmlbeautifulsouprequest

解决方案


与您的评论不同,数据不是通过 JS 填充的。关于这件事的两个线索:

  1. 如果您查看页面源代码,则该表已填充到您的浏览器 html 中。
  2. 如果您查看您的浏览器网络,您的浏览器没有 XHR 请求来获取数据。

<tr/>因此,正如@SuperStew 所说,您可以尝试使用 Beautifulsoup,尽管在每个元素上使用 for 循环可能有点麻烦。

如果我需要以可用的格式获取该数据,我会使用 pandas。请参阅read_html方法的文档。这有一个额外的好处,它应该有助于将数据转换为您需要的类型,即整数。但正如文档所述,您应该期待一些数据争论。


编辑

似乎 mlbstats 阻止通过用户代理过滤进行抓取,因此您必须使用带有欺骗性用户代理的请求来获取页面 html:

import pandas as pd
import requests
url = "https://razzball.com/mlbpitchingstats/"
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
response = requests.get(url, headers=headers)
data = pd.read_html(response.content)  # will need wrangling

推荐阅读