您可以从网站上刮取变化的颜色吗?

时间:2019-06-12 16:16:02

标签: python python-3.x beautifulsoup python-requests

我正在从某个网站上刮取一些风的值,并且它可以刮取这些数字,但只有我无法从这些数字中刮除bg颜色。 (背景颜色随值而变化,这非常重要)

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",{''})

1 个答案:

答案 0 :(得分:1)

在原始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)通过向上面的链接发送请求,直接从服务器收集实时数据,然后根据其关联的颜色对其进行解释。这可能是最复杂的解决方案,但是如果无法使用无头浏览器,则必须执行此操作。您必须通读页面所使用的JavaScript来“着色”数据并自己在Python中进行模仿。