使用 rvest 跟随带有相对路径的“下一个”链接

2023-12-29

我正在使用rvest从页面中抓取信息的包http://www.radiolab.org/series/podcasts http://www.radiolab.org/series/podcasts。抓取第一页后,我想点击底部的“下一步”链接,抓取第二页,移至第三页,依此类推。

下面的行给出了一个错误:

html_session("http://www.radiolab.org/series/podcasts") %>% follow_link("Next")
## Navigating to 
##     
##       ./2/  
## Error in parseURI(u) : cannot parse URI 
##     
##       ./2/  

检查 HTML 显示“./2/”周围存在一些额外的问题rvest显然不喜欢:

html("http://www.radiolab.org/series/podcasts") %>% html_node(".pagefooter-next a")
## <a href="&#10;    &#10;      ./2/  ">Next</a> 

.Last.value %>% html_attrs()
##                   href 
## "\n    \n      ./2/  "

问题一:我怎样才能得到rvest::follow_link像我的浏览器一样正确处理这个链接? (我可以手动抓取“下一个”链接并使用正则表达式清理它,但更喜欢利用提供的自动化功能rvest.)


结束时follow_link代码,它调用jump_to。所以我尝试了以下方法:

html_session("http://www.radiolab.org/series/podcasts") %>% jump_to("./2/")
## <session> http://www.radiolab.org/series/2/
##   Status: 404
##   Type:   text/html; charset=utf-8
##   Size:   10744
## Warning message:
## In request_GET(x, url, ...) : client error: (404) Not Found

深入研究代码,问题似乎出在XML::getRelativeURL,它使用dirname去掉原始路径的最后一部分(“/podcasts”):

XML::getRelativeURL("./2/", "http://www.radiolab.org/series/podcasts/")
## [1] "http://www.radiolab.org/series/./2"

XML::getRelativeURL("../3/", "http://www.radiolab.org/series/podcasts/2/")
## [1] "http://www.radiolab.org/series/3"

问题2:我怎样才能得到rvest::jump_to and XML::getRelativeURL正确处理相对路径?


由于 RadioLab.com 似乎仍然出现此问题,因此最好的解决方案是创建一个自定义函数来处理此边缘情况。如果您只担心这个网站 - 以及这个特定的错误 - 那么您可以编写如下内容:

library(rvest)

follow_next <- function(session, text ="Next", ...) {
    link <- html_node(session, xpath = sprintf("//*[text()[contains(.,'%s')]]", text))
    url <- html_attr(link, "href")
    url = trimws(url)
    url = gsub("^\\.{1}/", "", url)
    message("Navigating to ", url)
    jump_to(session, url, ...)
}

这将允许您编写如下代码:

html_session("http://www.radiolab.org/series/podcasts") %>%
    follow_next()

#> Navigating to 2/
#> <session> http://www.radiolab.org/series/podcasts/2/
#>   Status: 200
#>   Type:   text/html; charset=utf-8
#>   Size:   61261

这本身并不是一个错误 - RadioLab 上的 URL 格式错误,并且无法解析格式错误的 URL 不是错误。如果您想自由地处理问题,则需要手动解决它。

请注意,您还可以使用RSelenium启动一个actual浏览器(例如 Chrome)并让其为您执行 URL 解析。

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

使用 rvest 跟随带有相对路径的“下一个”链接 的相关文章

  • R data.table如何创建重复项[重复]

    这个问题在这里已经有答案了 I have dataDT lt data table A 1 3 B 1 3 dataDT A B 1 1 1 2 2 2 3 3 3 I want dataDT lt data table A c 1 3 1
  • 当虚拟键盘出现时,三星 Android 上的 Html 输入失去焦点

    我在使用 html5 Web 应用程序的 Samsung Galaxy Tab A Android 7 0 上遇到输入元素失去焦点的问题 这似乎是android中的一个问题 就像在windows 10或iOS上一样 尽管弹出虚拟键盘时也会触
  • 在 ggplot2 中使用 FontAwesome 作为点的替代品

    这可能是一个相当基本的事情 但我似乎找不到有意义的答案 我正在尝试使用 R 中的 fontawesome 包将表情符号用作 ggplot2 图表中的点 但我很难弄清楚如何为每个变量分配不同的表情符号 这是一些示例数据 我们将数据框称为 样本
  • 在 RStudio 中自动格式化 R 代码

    RStudio 中是否有自动格式化代码的可能性 I found this https stackoverflow com questions 3017877 tool to auto format r code 但未与RStudio连接 还
  • 如何使CSS背景图像响应? [复制]

    这个问题在这里已经有答案了 好的 所以我遇到了这个使背景图像响应的解决方案 响应式 CSS 背景图片 https stackoverflow com questions 12609110 responsive css background
  • Jquery - 如何替换div中的一个单词?

    我有一个从其他位置复制的 div 我需要更改其中的一个单词 这是 HTML div class dealer addy 8726 N Royal Ln br Irving TX 75063 br email protected cdn cg
  • 使用清单修改 Latex 文档中 R 代码的字体颜色

    我试图在 Latex 文档中突出显示 R 代码 但我似乎无法更改代码框中的字体颜色 举个例子 我认为commentstyle color red 应该给我红色字体的评论 但评论显示为蓝色或黑色 不太清楚 另外 我认为backgroundco
  • 可以在 iPad 上自动播放 HTML5 视频吗?

    The
  • R - 数据框列中唯一值的数量

    对于数据框df 我需要找到的唯一值some col 尝试了以下方法 length unique df some col 但这并没有给出预期的结果 然而length unique some vector 对向量进行处理并给出预期结果 创建 d
  • 如何使用jQuery加载跨域html

    我有 2 个不同的 java web 项目在 2 个不同的 tomcat 服务器上运行 假设 projA 和 projB 在这里 我尝试从 projA 加载 projB 中可用的 html 我只是使用 jQuery load 来实现这一点
  • 使用 R 的 qdap 包估计文档极性,无需使用 sendSplit

    我想申请qdap s polarity函数对文档向量进行处理 每个文档可以包含多个句子 并获得每个文档相应的极性 例如 library qdap polarity DATA state all polarity Results 1 0 81
  • 我们可以为 border-bottom 属性设置渐变颜色吗? [复制]

    这个问题在这里已经有答案了 我们可以添加渐变颜色吗border bottomhtml块元素的属性 边框应该与此类似 谁能告诉我这在 CSS3 中是可能的吗 我像这样尝试过 但无法让它工作 border gradient border bot
  • 绘图中的文本错误 | Jupyter-R

    我正在尝试在通过 Anaconda 安装的 Jupyter 笔记本上使用 R 中的 ggplot2 绘制一个带有一些数据的简单散点图 以下是我使用的代码 ggplot data df1 1 1000 geom point mapping a
  • 使用 c out 标签时不会出现新行

    我将 n 附加到字符串中 当使用 s 标签文本区域时 已附加换行符并且数据逐行显示 但是当我使用 c out 标签时 数据显示在一行中 如何使用 c out 标签逐行显示 StringBuffer sb new StringBuffer f
  • 基于 R 中多个现有列的计算的新列

    R df orginal 中的原始数据框 AB CD EF GH A 0 12 M A 0 13 F A 0 14 F A 1 16 M A 1 17 F A 1 18 M A 1 18 M A 2 0 78 M A 2 0 12 M A
  • 如何引用基于 data.frame 中的变量的列表?

    我有一张简单的桌子emp id and job code 我想返回正确的payout基于job code 我已经用嵌套的 ifelse 来解决这个问题 但是如果我有更多怎么办job code s library dplyr set seed
  • ag-Grid 中的行格式

    我们需要有条件地将行文本设置为粗体 目前它仅适用于单个单元格 但我们需要在所有列单元格上应用文本粗体 应用格式设置后 isBold 列必须隐藏 删除 此列仅用于格式化 如何应用文本缩进 10px isBold 列包含真实值的第一列的 有可能
  • 如何将 unicode 符号转换为 ggplot 的因子水平?

    我想在 ggplot 图例中获取一个符号 而不在比例中指定 我要这个 df lt data frame a 1 5 b factor 1 5 labels c 1 4 u2265 5 c 10 14 ggplot df aes a c co
  • 使用 HTML 标签作为背景图像而不是 CSS background-image 属性?

    我需要使用 html img 标签作为背景图像 div 然后我将放置一个 p 的内容 我已经尝试过 但似乎无法让它们正确显示 我使用了相对位置 负值的边距 任何建议或指出我正确的方向将不胜感激 p div img src http www
  • Jquery 脉动改变颜色或图像

    我正在尝试使用 jquery 脉动代码让 div 改变颜色 但我希望它从红色变为黑色 但我听说要做到这一点 你必须下载某个插件 所以我希望它脉动为图片 到目前为止我有这两个代码 img src 36 gif alt width 105 he

随机推荐

  • 当 php 返回值更改时,使用 javascript 更新 html 代码

    我想使用 php 文件的返回来不断更新 html 文档 因此我需要使用 jQuery 函数 get returnfunction php function data test data document getElementById t1
  • python 3.4 多重处理不适用于unittest

    我有一个使用多处理的单元测试 从 Python 3 2 升级到 Python 3 4 后 出现以下错误 我找不到任何提示 Python 内部发生了什么变化以及我必须改变什么才能使我的代码运行 提前致谢 Traceback most rece
  • 如何使用 GDB 在 Emacs 中调试 R 包(带有 C 代码)?

    我目前正在编写一个 R 包并通过以下方式使用编译的 C 代码RcppR 中的包 对于像我这样的非程序员来说 Rcpp 使 R 和 C 代码的交互更容易 恕我直言 我想使用 gdb 调试 C 程序中的一些错误 我用 google 搜索了一下
  • 如何使用 VERTX 处理程序获取 POST 表单数据?

    我可以使用缓冲区处理程序获取表单数据 但它是一个 void 函数 我无法返回表单数据值 总共有大约 4 7 个表单 我不想最终一遍又一遍地编写相同的处理程序 因为默认函数是 void html a href activateUserPage
  • ASP.NET MVC 5 Identity 2.0、Windows Auth、具有角色属性的用户模型

    我正在尝试创建一个使用 Windows 身份验证但使用从用户模型中提取的角色的 MVC5 应用程序 我到处搜索示例 但我能找到的唯一示例是基于旧的 ASP NET 身份框架的 有人愿意指出我正确的方向吗 Thanks 所以我想出了一种方法来
  • 用户使用 Firebase Auth 和 Swift 验证其电子邮件后,如何重定向回我的应用?

    当用户在我的应用程序中注册时 他们会收到一个弹出窗口 显示 请验证您的电子邮件 然后登录 当用户单击 确定 时 他们将进入登录页面 此时 用户应转到邮件应用 iPhone 并单击从 Firebase 发送给他们的链接 单击此链接当前会打开
  • 从 NUnit 测试代码创建 iOS UI 组件

    我正在尝试为一些以编程方式创建 UIButtons 的代码编写单元测试 但是当我从测试中调用此代码时 我得到了NullReferenceException 在调试器中单步执行 看起来像UIButton FromType 返回空值 这是我正在
  • Corrgram 包装水平和垂直标签

    我正在尝试使用 Corrgram 包中的 labels 参数来绘制垂直轴和水平轴 但遇到了严重的困难 我尝试通过 labels 参数传递我的变量名称 但我的标签仍然在对角线上 我的代码如下 correlations lt c var1 va
  • 在没有模型的数据存储中查询

    我正在尝试在 appengine 中创建一个应用程序来搜索键列表 然后使用此列表从数据存储中删除这些记录 此服务必须是通用服务 因此我无法使用仅按名称搜索的模型当然 可以通过应用程序引擎功能来做到这一点吗 下面是我的代码 但它要求我有一个模
  • Add() 方法为 Code-First 实体框架中的链接模型添加重复行

    以下是将贷款请求添加到数据库的操作 HttpPost public ActionResult Add Models ViewModels Loans LoanEditorViewModel loanEditorViewModel if Mo
  • 如何在 PDO 准备语句中使用 LIKE 子句? [复制]

    这个问题在这里已经有答案了 我有一个这样的sql查询 SELECT FROM tbl name WHERE title Like needle 当我使用此语句手动查询 MySQL 数据库时 它起作用了 但是当我将它与 PDO 一起使用并使用
  • 在 Windows 上安装 git:Git Bash Here 或 git-cheetah shell 扩展?

    我正在 Windows XP 上安装 Git 在安装过程中 安装程序会询问我是否想要 1 上下文菜单条目 Git Bash Here 以及 Git GUI Here 选项 or 2 git cheetah shell 扩展 仅限 32 位
  • Pyspark:自定义窗口函数

    我目前正在尝试提取 PySpark 数据框中连续出现的一系列事件 并对它们进行排序 排名 如下所示 为了方便起见 我已通过以下方式对初始数据框进行了排序 user id and timestamp df ini user id timest
  • 移位是 O(1) 还是 O(n)?

    是否轮班操作O 1 or O n 计算机通常需要更多的操作来移动 31 位而不是移动 1 位 这是否有意义 或者说这是否有意义操作次数换档所需的是constant不管我们需要转移多少地方 PS 想知道是否hardware是一个合适的标签 某
  • 使用 AWS amplify 和 graphql 创建新用户时出现“未经授权”错误

    所以我认为这个问题来自于我不太理解 AWS cognito 用户池和 graphql 模式中的身份验证规则之间的关系 当我运行下面的代码时 我收到消息 未授权访问 User 类型上的 createUser import React from
  • 从模板中获取 Django 表单小部件的类型

    我正在迭代表单的字段 对于某些字段 我想要稍微不同的布局 需要更改 HTML 为了准确地做到这一点 我只需要知道小部件类型 它的类名或类似的名称 在标准 python 中 这很容易 field field widget class name
  • AS3中dispatchEvent()可以带参数吗?

    看这个例子 addEventListener myEventType myFunction argument function myFunction args String Function return function evt Even
  • 使用 Json.NET 读取大整数

    我有一些带有巨大整数的 json 大约有几百位数字 我想将它们解析为 BouncyCastle 的BigInteger https github com onovotny BouncyCastle PCL blob pcl crypto s
  • 如何在 Mac Os X 上将用户添加到 apache 组?

    我实际上正在尝试在我的 MacBook Pro Mac OS X 10 6 上运行 Symfony2 当我通过 apache 启动应用程序时 所有缓存和日志文件都是由 www www 用户 组创建的 但是 我已经必须使用我自己的用户在 CL
  • 使用 rvest 跟随带有相对路径的“下一个”链接

    我正在使用rvest从页面中抓取信息的包http www radiolab org series podcasts http www radiolab org series podcasts 抓取第一页后 我想点击底部的 下一步 链接 抓取