rvest::html_text 和 RSelenium::getPageSource 有什么区别?

2024-02-16

我正在抓取一些网页,我注意到 rvest(read_html,然后 html_text)提供的结果与 RSelenium(getPageSource())提供的结果不同。

更具体地说,当涉及下拉菜单时,使用 html_text 只会提供选项的名称,而使用 RSelenium 则可以获得选择后将定向到的页面的 url。

我的问题是:(1)为什么会出现这种差异,差异的本质到底是什么? (2) 有没有一种方法可以获得与 RSelenium 相同的源文本提取,但使用更快的方法,例如 rvest 包?

我尝试过使用 webdriver,一个 PhantomJS 实现,根据建议rvest 与 RSelenium 文本提取结果 https://stackoverflow.com/questions/56857535/rvest-vs-rselenium-results-for-text-extracting,并且它们的 getSource 函数确实提供了与 RSelenium 相同的结果。然而,虽然这比 RSelenium 快,但它仍然比 rvest 慢得多。

library(rvest)
library(RSelenium)
library(webdriver)
library(tictoc)
library(robotstxt)

test_url <- "https://www.bea.gov"
robotstxt::paths_allowed(test_url)

# rvest
tictoc::tic()
resultA <- html_text(read_html(test_url))
tictoc::toc()

# RSelenium
tictoc::tic()
remDr <- remoteDriver(port = 4445L, browserName = "firefox")
remDr$open()

remDr$navigate(test_url)
resultB <- remDr$getPageSource(test_url)
tictoc::toc()

# webdriver
tictoc::tic()
pjs <- run_phantomjs()
ses <- Session$new(port = pjs$port)

ses$go(test_url)
resultC <- ses$getSource()
tictoc::toc()

您可以看到 resultA 与 resultB 和 resultC 不同。更具体地说,我的重点是从“工具”一词开始,这是用于选择该网站提供的有关“工具”的不同选项卡的下拉菜单的部分。

仅显示一小块,在 rvest 中选择“BEARFACTS”是:

BEARFACTS\n                                    \n                                                \n                                    

而在 RSelenium 中,它类似于以下内容:

<li class=\"expanded dropdown\">\n                    <a href=\"https://apps.bea.gov/regional/bearfacts/\">BEARFACTS</a>\n  

和...之间的不同RSelenium and rvest is:

  • RSelenium运行真正的网络浏览器,因此它将加载网页中包含的任何 javascript(javascript 通常用于加载其他 html 元素或数据after初始 html 已加载)。
  • rvest不运行 javascript,因此可以更快地检索页面 html,但会错过在初始页面加载后使用 javascript 加载的任何元素。

一些有用的提示:

  • 当抓取不加载 JavaScript 的页面时,请使用 rvest。
  • 当您必须使用 RSelenium 时,请尝试使用无头选项来提高速度(它将像平常一样在浏览器中加载页面,但不会显示任何图形元素,因此速度会更快)。

使用 RSelenium 无头的示例

eCaps <- list(chromeOptions = list(
  args = c('--headless', '--disable-gpu', '--window-size=1280,800')
))

rD <- rsDriver(browser=c("chrome"), verbose = TRUE, chromever="78.0.3904.105", port=4447L, extraCapabilities = eCaps) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

rvest::html_text 和 RSelenium::getPageSource 有什么区别? 的相关文章

  • R:变换不规则时间字符串

    我有两个不同的时间序列 来自不同的数据帧 具有不同的不规则格式 但问题是相同的 我只想提取小时 分钟 秒和毫秒 时代系列看起来像这样 ts1 08 27 23 445 08 27 24 280 08 27 25 115 I tried st
  • Shiny 中的模态对话框:可以调整宽度但不能调整高度

    在我的 Shiny 应用程序中 我有几个来自闪亮BS 包的模式窗口 我可以像这样调整这些模式窗口的宽度 tags head tags style HTML modal lg width 1200px abs 1 background col
  • 在 mts 对象上使用 Apply 系列函数

    在 mts 对象上使用 apply 或 sapply 会在发送到函数时删除其时间序列属性 我应该如何在 mts 对象中的每个时间序列上应用相同的函数 带有 ts 输入和 ts 输出 并返回它 最好是 mts 我的意思是除了使用 for 循环
  • R:错误消息---包错误:“functionName”未从当前命名空间解析

    我正在使用一个一直运行到 R3 0 的软件包 问题如上所述 当我们调用在 R 2 15 2 中工作的函数时 从 R 3 0 开始我们得到一个错误 Error in C solarspectrum3 as double lon as doub
  • R - 根据另一个数据框查找每组的重叠日期

    我有一个数据框 其中包含多个雨量计的降雨测量值 如下例所示 gt rnfl ID date value 1 250 2000 03 01 5 37 2 250 2000 03 02 0 00 3 250 2000 03 03 2 94 4
  • 正则表达式挑选括号之间的一些文本[重复]

    这个问题在这里已经有答案了 可能的重复 提取 R 中所有括号内的信息 正则表达式 https stackoverflow com questions 8613237 extract info inside all parenthesis i
  • udunits2 R 安装:找不到 udunits2.h

    我正在尝试在 R 中安装 udunits2 以满足对ggforce包裹 但是 安装程序在检查 udunits2 时始终失败 我已经尝试过中的说明this https stackoverflow com questions 47059517
  • r Shiny 中的 fileInput 函数没有响应

    我是 R 和 R闪亮的新手 一直致力于构建一个统计应用程序 该应用程序将允许用户导入文件 然后对数据运行不同的统计程序 直到最近 fileData 函数一直对我来说运行良好 现在每当我尝试上传文件时 都不会打开任何内容 我已尝试了所有我能想
  • R 条形图中的 X 轴

    我想问一个关于 barplot 轴的问题 首先请看我的数据 SerNo DOY Rain 1 350 0 2 351 0 3 352 0 4 353 0 5 354 0 6 355 0 7 356 0 8 357 0 9 358 0 10
  • 如何在 Shiny 中动态渲染的 textInput 添加样式元素

    你好堆栈溢出 在我最近提出的问题中 我已经解决了一些与动态渲染 UI 元素相关的主要问题 并在一些了不起的人的帮助下动态创建了观察者 参见此处 动态渲染的 UI 如何在第二次运行时删除旧的反应变量 https stackoverflow c
  • 使用 R 中的 tidyverse 重新调整因子和重新排序因子

    我想使用这些功能重新调平 and 重新排序 在我的数据框中 我了解重新调整级别的工作原理 但我不明白为什么我在 data frame 中看不到级别的变化 例如 假设我有鸢尾花数据集 library tidyverse head iris g
  • 如何使用r中的dplyr在特定位置插入空白行

    我想在数据框中的特定位置插入空白行 我的数据框是这样的 dat lt data frame group c rep A 1 rep B 4 rep C 2 rep D 2 group 1 A 2 B 3 B 4 B 5 B 6 C 7 C
  • 如何优化 R 中的 sapply 来计算数据帧上的运行总计

    我在 R 中编写了一个函数来按月份计算累积总数 但随着数据集变大 我的方法的执行时间呈指数增长 我是一名 R 程序员新手 你能帮我提高效率吗 该函数以及我调用该函数的方式 accumulate lt function recordnum d
  • 无法在 Powershell 中运行 R.exe

    我经常发现在命令行 Windows 上运行 R 更有用 然而 当我在 Powershell 中尝试时 我往往会遇到问题 但这可以通过第一次运行轻松克服cmd然后就可以了 这是我执行此操作时遇到的错误R CMD BATCH Invoke Hi
  • 创建序列组合

    我正在尝试解决以下问题 考虑 5 个简单序列 0 100 100 0 rep 0 101 rep 50 101 rep 100 101 我需要 3 个数字变量的集合 它们的所有组合都具有上述序列 由于有 5 个序列和 3 个变量 因此可以有
  • 在 Linux 下更改 RStudio 用户界面(不是图形等)中的字体大小

    This is not关于更改使用 RStudio 生成的图表中的字体大小的问题 我已经知道该怎么做了 我在配备 视网膜 显示屏的 MacBook Pro 上的 Linux 下使用 RStudio 我使用 KDE 作为我的窗口管理器 我可以
  • for 循环与 cor.test 在许多类别上

    我正在尝试在 R 中编写一个循环 它将循环遍历 3 个不同的物种 以计算两个连续变量 Redness 和 VarNormAbund 之间的相关性 我的循环正在运行 但 3 个物种中每一个的输出都是相同的 这让我认为循环卡在第一个物种上 co
  • 如何将 mcmc.list 转换为 bugs 对象?

    我正在使用rjagsR 库 功能coda samples产生一个mcmc list 例如 来自example coda samples library rjags data LINE LINE recompile LINE out lt c
  • 关于如何使用 selenium webdriver 自动执行 google 电子表格的示例 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这只是一个知识共享示例 这是我使用 selenium webdriver 通过 gmail 实现 google 电子表格自动化的示例 pac
  • 求解非线性方程组

    我正在尝试求解以下四个方程组 我尝试过使用 rootSolve 包 但似乎我无法通过这种方式找到解决方案 我正在使用的代码如下 model lt function x F1 lt sqrt x 1 2 x 3 2 1 F2 lt sqrt

随机推荐

  • 如何在 BigQuery 的标准 SQL 中实现 RATIO_TO_REPORT()?

    我有一个使用 RATIO TO REPORT 的旧版 SQL 查询 它不使用开放访问表 但它是这样的 SELECT Mutation AA Gene name CaseCount RATIO TO REPORT CaseCount OVER
  • Angular2中如何将值从一个组件传递到另一个组件?

    我正在尝试将值从 Angular2 中的一个组件传递到另一个组件 例如 我正在尝试实现一个组件并在该组件中设置数据和标题 然后将该数据和标题传递给嵌入其中的另一个组件 这是更好解释的代码
  • 施特拉森的矩阵乘法在哪里有用?

    Strassen 的矩阵乘法算法仅比传统算法略有改进O N 3 算法 它具有更高的常数因子并且更难以实现 鉴于这些缺点 strassens 算法实际上有用吗 它是否在任何矩阵乘法库中实现 此外 矩阵乘法在库中是如何实现的 一般来说 施特拉森
  • 重试 MySQL / SQLAlchemy 的死锁

    我已经搜索了很长一段时间 但找不到解决我的问题的方法 我们在项目中将 SQLAlchemy 与 MySQL 结合使用 并且多次遇到可怕的错误 1213 尝试获取锁定时发现死锁 尝试重新启动事务 在这种情况下 我们最多尝试重新启动交易三次 我
  • Selenium - 使用透明代理的 MoveToElement()

    我有元素 public ArticlePage PageFactory InitElements Browser driver this FindsBy How How Id Using someId private IWebElement
  • 命令行无法识别 Node-sass

    我正在尝试设置node sass 遵循CSS Tricks 说明 https css tricks com why npm scripts Node 和 npm 已正确安装 node sass 安装也正常 当我去跑步时node sass o
  • 如何设置对 Azure 应用服务的 FTP 访问?

    我使用 Visual Studio 将我的网站 发布 到 Azure 看起来工作正常 现在我希望能够将文件通过 FTP 传输到此应用程序服务 但是 如何在此应用服务中设置 FTP 凭据 以便可以通过 FTP 进行身份验证 我本来希望在 部署
  • 创建新的 AVD-CPU/ABI 字段显示“未安装系统映像”

    我正在创建一个新的 AVD 我用 ARM CPU 镜像创建了一个 但大约 45 分钟后仍无法启动 所以我删除了它并下载了 Intel x86 Atom 映像 创建 AVD 时 选择 CPU 的字段变为非活动状态 并显示 未为此目标安装系统映
  • Powershell StreamReader - 如何等待新文件可读

    我的脚本通常假设存在一个 txt 文件 其中包含有助于其更好运行的设置 但是 如果该脚本不存在 它会创建一个本地文件来保存这些设置 我意识到这没有逻辑need然后阅读此文件 但我想了解为什么我不能 void System IO File C
  • 使用 Polymer 和 app-route 每次点击时重新加载页面

    我正在使用 app route 和iron pages 以及纸质工具栏来显示我的视图 就我的一个观点来说 main view 显示随机选择的图像 该图像每次加载页面时都会发生变化 每次main view从工具栏中选择后 页面应重新加载 以便
  • 粘性元素不与同级元素一起向上滚动?

    这是我之前问题的延伸 如何使元素具有粘性但可与同级元素一起滚动到其完整 可变 高度 https stackoverflow com questions 75469958 how to make an element sticky but s
  • 为什么 HTTPS 请求会产生 SSL CERTIFICATE_VERIFY_FAILED 错误?

    这是我的Python代码 import requests requests get https google com 这是错误 requests exceptions SSLError HTTPSConnectionPool host go
  • XCTest 的 @testable 幕后发生了什么?

    我知道 testable import MyModule 提供探索非公开成员的能力MyModule来自 test 使用 testTarget 构建 模块MyModuleTests 我的 非测试 模块需要相同的功能 不在生产中 仅在调试模式下
  • TF 错误:没有剩余的更改需要签入

    我们有一个 NAnt 脚本来更新 TFS 中的 预构建 程序集 作为我们的 TeamCity 构建项目之一 该构建由其他构建触发 它执行 TF 签出 移动一些文件 然后执行 TF 签入 相关目标 tf解析为TF exe的路径
  • 识别任意日期字符串[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要能够识别日期字符串 如果我无法区分月份和日期 例如 12 12 10 也没关系 我只需将字符串分
  • 从命令行、Linux 中使用函数执行 python 脚本

    我有一个名为convertImage py的python文件 在文件中我有一个脚本可以根据我的喜好转换图像 整个转换脚本设置在一个名为convertFile fileName 的函数内 现在我的问题是我需要从linux命令行执行这个pyth
  • python - django:为什么我收到此错误:AttributeError:'method_descriptor'对象没有属性'today'?

    我有以下 python 代码 from django db import models from datetime import datetime class Poll models Model question models CharFi
  • ASP.NET 随机丢失会话值

    我已经为此寻找答案很长一段时间了 因为它继续困扰着我 我们在会话状态 InProc 中存储用户登录信息和有关用户当前活动的其他数据 我经常在尝试使用会话变量之一时遇到空引用异常 它发生在随机页面上 具有随机会话变量 我修改了 web con
  • 单个页面上有多个 FullCalendars

    我想在同一页面上添加多个 FullCalendars 可选 用于安排不同类型的事件并将信息保存在数据库中 但查看演示 示例代码 似乎我只能在每页添加单个日历 因为它是由 div div 您能否告诉我是否有办法实现此目的 以便当用户在同一页面
  • rvest::html_text 和 RSelenium::getPageSource 有什么区别?

    我正在抓取一些网页 我注意到 rvest read html 然后 html text 提供的结果与 RSelenium getPageSource 提供的结果不同 更具体地说 当涉及下拉菜单时 使用 html text 只会提供选项的名称