从网站抓取温度传感器数据的动态更新

2024-02-24

我写了以下Python代码:

from bs4 import BeautifulSoup
import urllib2

url= 'http://www.example.com'
page = urllib2.urlopen(url)
soup = BeautifulSoup(page.read(),"html.parser")
freq=soup.find('div', attrs={'id':'frequenz'})
print freq

结果是:

<div id="frequenz" style="font-size:500%; font-weight: bold; width: 100%; height: 10%; margin-top: 5px; text-align: center">tempsensor</div>

当我使用网络浏览器查看此网站时,网页显示动态内容,而不是字符串“tempsensor”。温度值每秒自动刷新。所以网页中的内容是 自动用数值替换字符串“tempsensor”。

我现在的问题是:如何让Python显示更新后的数值?如何获取自动更新的值tempsensor在美丽汤?


抱歉,不,单独使用 BeautifulSoup 是不可能的。

问题在于 BS4 并不是一个完整的网络浏览器。它只是一个 HTML 解析器。它不解析 CSS,也不解析 Javascript。

一个完整的网络浏览器至少可以做四件事:

  1. 连接到网络服务器,获取数据
  2. 解析 HTML 内容和 CSS 格式并呈现网页
  3. 解析 Javascript 内容并运行它。
  4. 提供用户交互,如浏览器导航、HTML 表单和 JavaScript 程序的事件 API

还不确定吗?现在看看你的代码。 BS4 甚至不包括第一步,即获取网页,为此您必须使用urllib2.

动态站点通常包含在浏览器上运行并定期更新内容的 Javascript。 BS4 不提供这一点,因此您不会看到它们,而且仅使用 BS4 也永远不会看到它们。为什么?由于上述第 (3) 项,下载并执行 Javascript 程序并未发生。它会发生在 IE、Firefox 或 Chrome 中,这就是为什么这些浏览器可以显示动态内容,而仅 BS4 的抓取则不会显示动态内容。

PhantomJS http://phantomjs.org/ and CasperJS http://casperjs.org/提供更机械化的浏览器,通常可以运行支持动态网站的 JavaScript 代码。但 CasperJS 和 PhantomJS 是用服务器端 Javascript 编程的,而不是 Python。

显然,有些人使用 PyQt4 内置的浏览器来执行此类动态屏幕截图任务 https://stackoverflow.com/questions/22028775/tried-python-beautifulsoup-and-phantom-js-still-cant-scrape-websites,隔离部分 DOM,并将其发送到 BS4 进行解析。这可能会提供 Python 解决方案。

在评论中,@Cyphase 建议您想要的确切数据可能在不同的 URL 上可用,在这种情况下,可能会使用 urllib2/BS4 获取并解析它。这可以通过仔细检查站点上运行的 Javascript 来确定,特别是您可以查找setTimeout and setInterval安排更新,或者ajax,或 jQuery 的.load从后端获取数据的函数。用于更新动态内容的 JavaScript 将usually仅从同一网站的后端 URL 获取数据。如果他们使用 jQuery$('#frequenz')指的是div,在JS中搜索this可能会找到更新div的代码。如果没有 jQuery,JS 更新可能会使用document.getElementById('frequenz').

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从网站抓取温度传感器数据的动态更新 的相关文章

  • 如何进行重定向并保留查询字符串?

    我想进行重定向并保留查询字符串 就像是self redirect加上发送的查询参数 那可能吗 newurl my new route urllib urlencode self request params self redirect ne
  • 将 numpy 数组及其大小写入二进制文件

    我需要将 2D numpy 数组写入文件 包括其尺寸 以便我可以从 C 程序中读取它并创建相应的数组 我编写了一些简单的代码来保存数组 并且可以从 C 读取它 但是如果我尝试先写入数组的大小 它总是会给我一个错误 这是我的简单 python
  • 保存下拉列表中的值

    这是我的情况 我有 2 页 一页用于选择值 一页用于编辑与该值关联的数据库相关内容 现在 我对如何将从下拉列表中选择的值保存到 PHP 的变量中一无所知 并且已经进行了相当多的研究 有任何想法吗 HTML
  • 如何用pygame画一条虚线?

    我需要在坐标系上绘制正弦波和余弦波 就像在this https i stack imgur com DGI8g png图片 除了没能代表以外 我所有的工作都做得很好虚线和曲线与 pygame 一致 我有与我需要的类似的东西 但我怎样才能让它
  • 为什么 Firefox 关闭空 html 标签?

    我注意到在 Firefox 中 当我查看源代码时 它会向空标签项添加结束标签 例如 hr and img src image jpg 在 Firefox 中查看源代码我明白了 hr and img src image jpg 该文档是 HT
  • Python 模块 BeautifulSoup 提取锚点 href

    我正在使用 BeautifulSoup 模块通过以下方式从 html 选择所有 href def extract links html soup BeautifulSoup html anchors soup findAll a print
  • 如何在 tkinter 后台运行函数[重复]

    这个问题在这里已经有答案了 我是 GUI 编程新手 我想用 tkinter 编写一个 Python 程序 我想要它做的就是在后台运行一个可以通过 GUI 影响的简单函数 该函数从 0 计数到无穷大 直到按下按钮为止 至少这是我想要它做的 但
  • 如何在使用 Flask for Python 3 的同时使用 Bootstrap 4?

    我检查过 发现默认安装时 Flask Bootstrap 原生使用 Bootstrap 3 3 7 但实际上我想通过使用 Flask Bootstrap 包在我的项目中使用 Bootstrap 4 任何有关如何更新它或类似内容的帮助将不胜感
  • 在添加数据之前使用 Python gdata 清除工作表中的行

    我有一个 Google 电子表格 我使用 python 脚本和 gdata 库填充值 如果我多次运行脚本 它会将新行附加到工作表中 我希望脚本在填充之前首先清除行中的所有数据 这样每次运行时我都会有一组新的数据脚本 我尝试过使用 Updat
  • 类型错误:无法连接“str”和“int”对象有人可以帮助新手使用他们的代码吗?

    感谢任何帮助 还有任何重大缺陷或您在格式或基本方面看到的任何重大缺陷 请指出 谢谢 day raw input How many days locations raw input Where to days str day location
  • 将 div 附加到另一个 div 的右侧

    我有一个 div 它就像一个容器 里面有 2 个图像 一张图像位于 div 的左侧 另一张图像位于右侧 我的容器是Bootstrap的容器 它们都用 div 包裹 并且div s position is fixed 我的问题是我无法找到要附
  • 如何读取多个文件并将它们合并到一个 pandas 数据框中?

    我想读取位于同一目录中的多个文件 然后将它们合并到一个 pandas 数据框中 如果我这样做的话它会起作用 import pandas as pd df1 pd read csv data 12015 csv df2 pd read csv
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • 如何在 Jupyter Notebook 中选择 conda 环境

    我安装了 Anaconda 5 3 和 Python 3 7 根环境 之后我使用 Python 3 6 创建了一个新环境 py36 我激活了新环境activate py36 conda env list表明环境是活跃的 但是当我启动 Jup
  • python 中“重载”函数的最佳方法? [复制]

    这个问题在这里已经有答案了 我正在尝试在 python 中做这样的事情 def foo x y do something at position x y def foo pos foo pos x pos y 所以我想根据我提供的参数数量调
  • 在画布上剪出圆形图像

    我正在使用 html5 canvas 并且我正在创建一个游戏 可以将您的脸部上传到游戏中 并将其用作主要角色 不幸的是 游戏中的角色是圆形的 就像笑脸一样 那么这将如何完成呢 是否可以拍一张照片 然后将其剪成一个圆 这样圆之外的任何东西都是
  • 如何更改数据表中标题单元格的内容?

    我正在使用数据表 http datatables net plugin 在我的可排序列上 我想用按钮替换列文本 但是这样做 oSettings aoColumns i nTh text 我可以检索相应列的文本 但是 oSettings ao
  • 如何将另一整列作为参数传递给 pandas fillna()

    我想用另一列中的值填充一列中的缺失值 使用fillna方法 我读到循环遍历每一行将是非常糟糕的做法 最好一次完成所有事情 但我不知道如何使用fillna 之前的数据 Day Cat1 Cat2 1 cat mouse 2 dog eleph
  • 基于 Web 请求在 Airflow 上运行作业

    我想知道是否可以在通过 HTTP 收到请求时执行气流任务 我对 Airflow 的调度部分不感兴趣 我只是想用它来代替芹菜 因此 示例操作如下所示 用户提交一份表格 请求某些报告 后端接收请求并向用户发送请求已收到的通知 然后后端使用 Ai
  • 如何从 Pandas 数据框函数调用中回顾之前的行?

    我正在研究 回测交易系统 我有一个包含 OHLC 数据的 Pandas 数据框 并添加了几个计算列 https stackoverflow com questions 12376863 adding calculated columns t

随机推荐

  • Laravel 5.5 将迁移与生产数据库合并

    希望我能很好地解释这一点 我有一个 Laravel 应用程序 已经投入生产了一分钟 所以 我有一堆包含很多更改的迁移文件 我想合并这些迁移文件而不丢失数据库 我的方式think这会起作用 将所有生产表迁移到所需状态 将所有迁移文件合并为所需
  • 如何列出 mongo shell 中的所有数据库?

    我知道怎么做列出特定数据库中的所有集合 https stackoverflow com questions 8866041 how to list all collections in the mongo shell 但是如何在 Mongo
  • mysqld_safe UNIX 套接字文件的目录“/var/run/mysqld”不存在

    使用 mysqld safe 启动 mysql 服务器 5 7 17 时 出现以下错误 2017 02 10T17 05 44 870970Z mysqld safe Logging to var log mysql error log 2
  • 从 XMLHttpRequest 对象中删除 cookie

    我正在使用 jquery 进行 ajax 调用 例如 ajax url path to webservice asmx beforeSend function xmlHTTPRequest modify headers here remov
  • 分页计算算法

    我正在尝试计算分页 var pagination total result length per page itemsPerPage required current page currentPage required last page
  • 用回形针圆角

    如何用回形针创建圆角 我找到了这个解决方案 它创建了使用convert options用回形针实现圆角 http loo no 2009 08 09 rounded corners with paperclip 但它不适用于 Rails 3
  • 跨浏览器事件对象规范化?

    我正在寻找有关事件对象的事件规范化的良好资源 我想自己做 但我总觉得我会错过一些东西 这是我到目前为止所掌握的 如果我错过了什么 请告诉我 var eFix function e e e window event e target e ta
  • Android,Cometd:Cometd 发送备用消息

    我正在开发一个 Android 应用程序 在其中实现聊天功能 考虑到 Cometd 的使用 聊天速度相当快 但由于某种原因 Cometd 正在发送备用消息 如果它发送message 1 则不发送message 2 然后发送3 依此类推 这是
  • 在 Svelte 中传递道具

    我正在尝试使用 Svelte Svelte Routing 和 Firestore 实现一个相当标准的博客应用程序 但我认为我误解了 props 在组件之间传递方式的基本部分 我的初始代码基于 Fireship io 上的优秀教程 该教程按
  • git amend 后的 git 合并冲突 - “你的分支和‘origin/master’已经分歧”

    发生的情况是这样的 最近提交到远程主控之后 我对本地存储库做了一个小小的更改 I add git commit amend并留下与 HEAD 相同的提交消息 我尝试将回购推向mastergit push 现在我明白了 On branch m
  • 如何在不使用VerifyExtraction的情况下将MSSQLServer数据库提取为.dacpac?

    我想使用 Server Management Studio 提取 MSSQLServer 数据库的数据库架构 我使用提取命令 提取数据层应用程序 数据库中有对另一个数据库的多个引用 因此 我收到以下错误 提取数据库时出错 数据包架构模型验证
  • 如何从小型、可重用的查询组成实体框架查询?

    我的应用程序中有一些 相当多余的 查询 如下所示 var last30Days DateTime Today AddDays 30 from b in Building let issueSeverity from u in Users w
  • Android Hello-World 编译错误:Intellij 找不到 aapt

    我正在尝试在 Ubuntu 12 04 中使用 IntelliJ 设置 Android 开发环境 我创建了一个 Android 应用程序模块 但是当我尝试构建时 出现以下错误 android apt compiler 无法运行程序 home
  • 为什么我的相机预览显示水平而不是垂直?

    在我的 Android 相机应用程序中 如果我将屏幕固定为横向 那么在横向模式下 它似乎必须被看到 但如果我将其固定为肖像 则相机预览将显示为水平方向 为什么会发生这种情况 以及解决方案是什么 Camera Parameters param
  • 正确使用封装在类内属性中的字段

    我应该使用哪种场景来更改类方法 属性内的私有字段 public class Example private int intVar 0 private string stringVar string Empty public int IntV
  • 是否可以在 Zeppelin Notebook 中设置全局变量?

    我正在尝试使用 Zeppelin 笔记本创建多段落仪表板 我希望使用仪表板的人们只需输入某些参数一次 例如 如果我正在制作包含有关不同网站的信息的仪表板 则仪表板用户只需选择他们想要的特定网站一次 整个多段落仪表板就会更新 这可能吗 如何在
  • 将 XFDF 与 PDF 表单合并以创建最终的 PDF 服务器端?

    这就是我目前所拥有的 用户提交表单数据并获得 下载 PDF 链接 该链接指向动态生成 XFDF 文件的脚本 并在设置适当的标头等后输出 XFDF 文件 XFDF 文件指向受密码保护的 PDF 这是使用 XFDF 数据填写字段的通用 PDF
  • 如何使用Flask-Migrate进行数据库迁移?

    我在使用 Flask Migrate 升级 降级数据库时遇到问题 有两张桌子 User and Post 由以下类定义 class User db Model id db Column db Integer primary key True
  • Google 日历 V3 在本地环境之外使用时挂起

    我正在为 net 版本的 Google Calendar API 开发一个包装器 身份验证相当简单并且在本地 localhost port 运行良好 UserCredential credential GoogleWebAuthorizat
  • 从网站抓取温度传感器数据的动态更新

    我写了以下Python代码 from bs4 import BeautifulSoup import urllib2 url http www example com page urllib2 urlopen url soup Beauti