r - rvest 疑难解答
问题描述
我有以下html字符串:
html <- '<head>
<dd>
"Line 1 : abc
Line 2 : def
Line 3 : ghi
Line 4 : jkl
Line 5 : mno"
</dd>
</head>'
如果我想提取 < dd > 标签之间的所有内容,那么我可以毫无问题地使用 XML 或 rvest 包:
library(tidyverse)
library(XML)
xpath <- '//dd'
html %>%
XML::htmlParse(., asText=TRUE) %>%
XML::xpathSApply(., path = xpath, xmlValue)
html %>%
xml2::read_html() %>%
rvest::html_nodes(xpath=xpath) %>%
rvest::html_text()
这会产生:
'\n "Line 1 : abc\n Line 2 : def\n Line 3 : ghi\n Line 4 : jkl\n Line 5 : mno"\n '
'\n "Line 1 : abc\n Line 2 : def\n Line 3 : ghi\n Line 4 : jkl\n Line 5 : mno"\n '
但我只想从第 4 行中提取文本。所以我更新了我的 Xpath 并保持其余代码相同:
xpath <- 'substring-after(substring-after(substring-before(//dd, "Line 5"), "Line 3"), "\n")'
html %>%
XML::htmlParse(., asText=TRUE) %>%
XML::xpathSApply(., path = xpath, xmlValue)
html %>%
xml2::read_html() %>%
rvest::html_nodes(xpath=xpath) %>%
rvest::html_text()
这一次 XML 有效,但 rvest 无效:
' Line 4 : jkl\n '
Error in nodes_duplicated(nodes): Expecting an external pointer: [type=character].
如何使用 rvest 获得“第 4 行:jkl\n”的预期结果?
解决方案
推荐阅读
- android - androidTest:如何在 res/raw 目录中获取文件的路径?
- java - @EnableScheduling 似乎不适用于 Java 1.7 代码
- arrays - 在 Swift 4 中使用数组解析嵌套的 JSON 语句
- python - 如何正确拆分多个下划线?
- java - 改造 2 @FormUrlEncoded 与空字段
- wpf - 您可以将 ItemsControl 中的 ItemsPanel 绑定到 Items 集合的超集吗?
- java - 从 ts 前端发送到 java 后端的对象转换为 LinkedHashMap
- python - 如何通过 Google App Engine 中的应用程序将文件写入 Google Cloud Storage?
- c# - 在扩展类型中访问扩展方法?
- javascript - 如何在html css中使用页脚