python - 你能从网站上刮下变化的颜色吗?
问题描述
我正在使用 刮取网站上的一些值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",{''})
解决方案
在原始 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) 使用Selenium、NightmareJS、Puppeteer等无头浏览器来呈现网站的实时版本并在图表呈现后收集数据。这将是更简单的答案,也是我推荐的答案。无头浏览器在运行时确实存在使用更多内存的缺点,因此如果这是一个需要扩展的解决方案,那么这可能会出现问题。
2) 通过向上面的链接发送请求,直接从服务器收集实时数据,然后根据相关的颜色对其进行解释。这可能是最复杂的解决方案,但如果使用无头浏览器是不可能的,这就是你必须做的。您必须通读页面用于“着色”数据并在 Python 中自己模仿它的 JavaScript。
推荐阅读
- python - 在 python 中实现 if-then 逻辑时出现 TypeError 问题
- python - 继承(抽象)类时如何处理微小但影响深远的实现差异?
- c - 手动编译并与make链接后“找不到文件或文件夹”
- excel - 使用特定标准对 Excel 值进行分组
- python - Django,getting only unique values from related object
- mysql - mysql 数据库转储。我想将生产数据复制到我的开发服务器。由于生产站点已启动,这样做安全吗?
- html - 获取原生 html 视频以在 chrome 上自动播放
- kotlin - 这不是指使用 Kotlins 类委托的原始对象
- python - tkinter: What should I do if I want to delete the number in the order of the button?
- c++ - 在文本板上编译没有此类文件或目录时出错