【问题标题】:Is it possible to scrape javascript graphs like this one? [closed]是否可以像这样抓取 javascript 图表? [关闭]
【发布时间】:2019-11-10 20:52:39
【问题描述】:

我需要收集来自不同始发地和目的地的历史市场运费率。目前,我只有这样的交互式图表可供我使用:

示例图

您必须单击图表才能显示数字(所有数字同时出现)。

我有一些通过 Scrapy 库抓取 HTML 网页的经验,但我想知道像 BeautifulSoup 这样的东西是否能够处理这类问题。

【问题讨论】:

  • 您没有提供任何技术细节。
  • 首先您需要requests 从服务器获取 HTML 或 JSON。如果你得到 JSON,那么你不需要 BeautifulSoup,它只解析 HTML/XML。可能 JavaScript 中的许多图形使用 JSON 格式从服务器获取数据。您只需找到此 JSON 数据的 url。
  • @KlausD。抱歉,我绝不是专业人士(甚至不是业余程序员)。什么样的技术细节会对诸如此类的问题有所帮助?
  • @furas 太好了!我会调查的
  • 这是一个很好的问题,但如果您提供具体的网站示例,那就太好了。

标签: python selenium web-scraping beautifulsoup scrapy


【解决方案1】:

简而言之-是的,但这取决于。

大多数 javascript 图表通过在 <script> 标签中嵌入 json 数据或对其进行 ajax 请求来工作。所以某处有 json 格式的图形数据——你只需要找到它。

要找到它,您应该首先打开页面源代码,然后按 ctrl+f 找到您在图中看到的一些关键点。在您的情况下,从 £407 开始 - 很可能它在嵌入的 json 中:

<script type="application/ld+json">
{'prices': ['£407',...]}
</script>

也可以作为 AJAX 请求检索它。以craft.co 为例。当您加载 https://craft.co/netflix 页面时,它会向图形数据发出 AJAX 请求:

【讨论】:

  • 图表的数据来自某个地方。正如@Granitosaurus 所说,它应该嵌入到 HTML 中或从外部 API 请求中接收。您可以通过查看 HTML 并查看 XHR 下的网络选项卡来发现这一点。请务必在刷新时检查保留日志并禁用缓存,以确保您再次获取数据。
猜你喜欢
  • 2023-03-11
  • 2015-06-15
  • 2020-04-12
  • 1970-01-01
  • 2013-11-16
  • 2021-03-22
  • 2023-03-21
  • 1970-01-01
  • 2016-02-24
相关资源
最近更新 更多