首页 > 解决方案 > 你能从网站上刮下变化的颜色吗?

问题描述

我正在使用 刮取网站上的一些值beautifulSoup,它可以刮取数字,只是我无法从数字中刮取背景颜色。(背景颜色随数值变化,很重要)

https://www.windguru.cz/station/219

这是页面,我想从风中刮掉颜色。

page = requests.get('https://www.windguru.cz/station/219')
soup = BeautifulSoup(page.text, "lxml")
table = soup.find_all("div",{''})

标签: pythonpython-3.xbeautifulsouppython-requests

解决方案


在原始 HTTP 请求环境中,您只收集服务器发回的 HTML。因此,如果页面不断呈现新数据,您将需要一个无头浏览器来观察这些变化。您可以看出数据正在此页面中呈现,因为观察网站的页面来源与您在页面上“检查元素”时看到的来源不同。

当您使用 Python 请求页面源时,您只会获得“骨架”HTML 和渲染脚本,而不是实际渲染的数据。

看起来这个页面每隔 20 秒就会不断地 ping 一个 PHP 脚本来收集新的图表数据。然后它使用 JavaScript 来解释该数据并将其解析为可见的图表......看起来它使用 SVG 来显示路径数据。

以下是来自 PHP 脚本的响应数据,我们可以通过查看 Web 检查器上的“网络”选项卡来找到它:

https://www.windguru.cz/int/iapi.php?q=station_data_current&id_station=219&date_format=Y-m-d%20H%3Ai%3As%20T&_mha=f4d18b6c

{
    "wind_avg": 6.99,
    "wind_max": 8.93,
    "wind_min": 4.85,
    "wind_direction": 171.215,
    "temperature": 13,
    "mslp": null,
    "rh": null,
    "datetime": "2019-06-12 23:08:17 CEST",
    "unixtime": 1560373697
}

您在这里有 2 个选项:

1) 使用SeleniumNightmareJSPuppeteer等无头浏览器来呈现网站的实时版本并在图表呈现后收集数据。这将是更简单的答案,也是我推荐的答案。无头浏览器在运行时确实存在使用更多内存的缺点,因此如果这是一个需要扩展的解决方案,那么这可能会出现问题。

2) 通过向上面的链接发送请求,直接从服务器收集实时数据,然后根据相关的颜色对其进行解释。这可能是最复杂的解决方案,但如果使用无头浏览器是不可能的,这就是你必须做的。您必须通读页面用于“着色”数据并在 Python 中自己模仿它的 JavaScript。


推荐阅读