【问题标题】:Automating a button Press with Python使用 Python 自动按下按钮
【发布时间】:2018-10-11 22:44:24
【问题描述】:

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

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

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

【问题讨论】:

  • 我怀疑这只是 JS 将 html 表转储为 csv。他们那样做有点烦人,但无论如何。您可以使用 beautifulsoup 来抓取表格并自己解析为 csv。不确定是否有内置功能可以帮助解决此问题,但怀疑这是第一次有人尝试这样做
  • 的查看,我不能完全告诉.. 似乎数据是由 javascript 填充的.. 所以 beautifulsoup 可能会失败:(
  • 如果你“查看页面源代码”,表格数据就会出现在那里,所以值得一试。但如果没有,您可以使用 selenium 轻松实现。

标签: javascript python html beautifulsoup request


【解决方案1】:

与您的评论不同,数据不是通过 JS 填充的。关于此的两条线索:

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

因此,正如@SuperStew 所说,您可以尝试使用 Beautifulsoup,尽管它可能有点麻烦,在每个 <tr/> 元素上使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2017-01-18
    • 2021-02-14
    • 1970-01-01
    • 2016-11-05
    相关资源
    最近更新 更多