python - 使用 Python 从站点(例如天气预报)获取实时日期
问题描述
我们有一个值每 20 毫秒更改一次的站点,例如天气预报站点。我想获取真实数据并使用python实时将它们保存在redis上。
如果我在 python 中使用请求库,实际上我的程序应该向服务器发送 https 请求并获得响应,该操作可能会延迟超过 100 毫秒,并且我无法获得实时更改值。
所以我不知道哪个库对我有用?
解决方案
对于从网站中提取数据而不向服务器发送 HTTP 请求以重新加载整个网页的方法是使用 Selenium Web 驱动程序。
通常,在网络上有两种类型的网站:
静态网站 - 显示从后端获取的网页,并且不在前端更新的网站
动态网站 - 使用 React/Angular/Vue 等前端开发并使用 API 从后端获取更新的网站,无需重新加载整个网页。
要抓取静态网站,建议使用请求包,因为它发送 HTTP/HTTPS 请求以重新加载整个网页。由于在您的情况下,网页是动态的,因此您应该使用 Selenium。在 Selenium 代码中,您应该首先传递要定位的网站,然后您可以编写一个循环,该循环每隔几毫秒触发一个函数来获取内容。提示:使用 Selenium with headless 来防止浏览器窗口打开。
PS:对于很多网站来说,抓取是不合法的,因为您正在以编程方式访问它们的内容。这些网站有自己的 API,这些 API 是为向您提供所需内容而付费的。所以刮你自己的风险。
推荐阅读
- algorithm - 是否有来自 st 的路径通过特殊节点?
- java - PassiveExpiringMap 没有过期的对象
- jquery - 使用 Power Query 通过 REST API 查询分页 XML
- xcode - 如何在 Azure Pipelines 中升级 XCode?
- html - 'counter-reset' 属性是否总是必须在父容器上定义?
- c# - 在不相关的组件上调用 OnSetParameterAsync
- javascript - 如何在 Nodejs 中使用对象
- python - groupby 变换的长度不匹配错误
- amazon-web-services - Amplify 无法使用 Amplify 识别预先存在的 Vue.js 项目
- ios - SwiftUI 不一致的行为从 SwiftUI 视图“推送”到 UIKit ViewController