javascript - 使用 Python 自动按下按钮
问题描述
我已经尝试了一段时间来弄清楚如何在此页面上自动下载 csv: https ://razzball.com/mlbpitchingstats/
在顶部,您可以单击一个基本的 html 输入框,然后单击该框上的下载。我知道我可以弄清楚如何使用无头驱动程序执行此操作,但我一直在尝试弄清楚如何使用请求或以某种方式访问下载按钮侦听器。
监控网络选项卡时,似乎没有对 api 的请求。我是使用无头浏览器的唯一选择吗?有没有办法通过请求来解决这个问题?任何帮助都会很大!
解决方案
与您的评论不同,数据不是通过 JS 填充的。关于这件事的两个线索:
- 如果您查看页面源代码,则该表已填充到您的浏览器 html 中。
- 如果您查看您的浏览器网络,您的浏览器没有 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
推荐阅读
- dependency-injection - .net 核心控制台应用程序中的 IOptionsSnapshot 不起作用
- r - 循环嵌套循环(在 R 或 Stata 中)
- android-recyclerview - RecyclerView 中的微调器以更新项目值
- git - 在 fork 的新分支中克隆一个远程项目。
- r - R中的一种热编码
- vba - 设置列宽时应用程序定义或对象定义的错误
- wordpress - 字体未显示在我的 WordPress 网站中。我用@font-face直接在css中添加
- java - 如何检测已接电话?
- mysql - 使用所有已配置的数据库/表设置 MySQL(主从)复制
- installshield - InstallShield "Full" Redistributable 强制互联网访问