【问题标题】:Webscraping an AJAX response using python使用 python 抓取 AJAX 响应
【发布时间】:2021-04-11 12:47:24
【问题描述】:

我正在尝试从一个免费显示该信息的网站 (https://www.wieland.com/en/metal-information#tab-general) 获取不同金属价格的信息。我已经通过使用 Python+Selenium 实现了它,但我知道还有更有效的方法(例如直接从 AJAX 响应中获取信息)。我已经找到了我想通过使用 FireFox 开发工具获得的信息,但是我找不到将这些信息直接导入 python 的方法。

目的是将日期和价格信息输入python,然后使用Pandas创建数据框

例如,我为了获得 AJAX 响应而遵循的步骤是:

1。

2。

3。

如果有人能在这个话题上指导我,我将不胜感激

【问题讨论】:

  • 当我输入您发布的 URL 时,我没有看到这些 XHR 请求正在生成。您究竟做了什么来生成这些 AJAX 请求。或者至少指定其中一个请求的完整 URL,而不是显示部分 URL 的图像。
  • 感谢您的快速反馈,我更新了我的帖子,展示了这些 AJAX 请求是如何生成的。 URL 在我上面所做的流程中并没有真正改变

标签: python ajax web-scraping


【解决方案1】:

看到上述网站的网络请求看起来我们需要在另一个 URL 上获得 cookie 同意,并在 Dataframe 中获取该表数据,我们将使用 pandas 的 read_html 函数并发送我们将使用的请求请求库。

编辑他们不需要发送cookie同意请求,否则您可以直接发送xhr请求。

import requests
from pandas import read_html

headers = {
    'X-Requested-With': 'XMLHttpRequest'
}
querystring = {
    "type": "general",
    "method": "getDetails",
    "language": "en",
    "refKey": "2101",
    "interval": "1",
    "intervalStart": "09.01.2021",
    "intervalEnd": "09.04.2021",
}
data = requests.get("https://www.wieland.com/en/ajax-metal-prices",headers=headers,params=querystring)
if data.status_code == 200:
    table = read_html(data.json()["content"]["template"], attrs={"class": "metalinfo-table"})[0]
    print(table)
else:
    print("Some Issue")

表变量有你的Dataframe 用于该表。

输出:

如果您有任何问题,请告诉我:)

【讨论】:

  • 非常感谢您的回复!这是非常有帮助的!然而,由于我刚刚开始学习网络抓取,我会更加熟悉使用它的道德规范。例如,在这个特定的案例中,我计划创建一个循环来获取铜、锌、镍等的价格,但这会以某种方式影响网站吗?(即创建过多的流量可能会失败)
  • 通常网站不会像这样失败,因为我认为您不会抓取大量数据并只想要其中的一部分,甚至抓取大量数据它会满足它,因为它保持在线状态只提供数据。
猜你喜欢
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多