在 R 中使用rvest来抓取网页,我想从 node中提取等价物innerHTML,特别是在 apply 之前将换行符更改为换行符html_text。
所需功能的示例:
library(rvest)
doc <- read_html('<html><p class="pp">First Line<br />Second Line</p>')
innerHTML(doc, ".pp")
应产生以下输出:
[1] "<p class=\"pp\">First Line<br>Second Line</p>"
有了rvest 0.2这个可以通过toString.XMLNode
# run under rvest 0.2
library(XML)
html('<html><p class="pp">First Line<br />Second Line</p>') %>%
html_node(".pp") %>%
toString.XMLNode
[1] "<p class=\"pp\">First Line<br>Second Line</p>"
随着更新rvest 0.2.0.900,这不再起作用。
# run under rvest 0.2.0.900
library(XML)
html_node(doc,".pp") %>%
toString.XMLNode
[1] "{xml_node}\n<p>\n[1] <br/>"
所需的功能通常在现在依赖的包的功能中可用-write_xml只要可以将其输出提供给变量而不是坚持写入文件。(也不接受 a )。xml2rvestwrite_xmltextConnection
作为一种解决方法,我可以暂时写入文件:
# extract innerHTML, workaround: write/read to/from temp file
html_innerHTML <- function(x, css, xpath) {
file <- tempfile()
html_node(x,css) %>% write_xml(file)
txt <- readLines(file, warn=FALSE)
unlink(file)
txt
}
html_innerHTML(doc, ".pp")
[1] "<p class=\"pp\">First Line<br>Second Line</p>"
有了这个,我可以例如将换行标记转换为换行符:
html_innerHTML(doc, ".pp") %>%
gsub("<br\\s*/?\\s*>","\n", .) %>%
read_html %>%
html_text
[1] "First Line\nSecond Line"
有没有更好的方法来使用来自例如 、 或其他包的rvest现有xml2功能XML?特别是我想避免写入硬盘。