R:rvest提取innerHTML

R:rvest提取innerHTML,第1张

概述使用R中的rvest来抓取一个网页,我想从节点中提取相当于inner HTML的内容,特别是在应用html_text之前将换行符更改为换行符. 所需功能的示例: library(rvest)doc <- read_html('<html><p class="pp">First Line<br />Second Line</p>')innerHTML(doc, ".pp") 应产生以下输出: [ 使用R中的rvest来抓取一个网页,我想从节点中提取相当于inner HTML的内容,特别是在应用HTML_text之前将换行符更改为换行符.

所需功能的示例:

library(rvest)doc <- read_HTML('<HTML><p >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.2library(XML)HTML('<HTML><p >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.900library(XML)HTML_node(doc,".pp") %>%   toString.XMLNode[1] "{xml_node}\n<p>\n[1] <br/>"

所需的功能通常在包xml2的write_xml函数中可用,rvest现在依赖于该函数 – 如果只有write_xml可以将其输出提供给变量而不是坚持写入文件. (也不接受textConnection).

作为一种解决方法,我可以暂时写入文件:

# extract INNERHTML,workaround: write/read to/from temp fileHTML_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或其他包?特别是我想避免写入硬盘.

解决方法 正如@ r2evans所指出的那样,as.character(doc)就是解决方案.

关于你的最后一个代码片段,它希望在转换< br>时从节点中提取< br>分离的文本.到换行符,目前尚未解决的rvest issue #175,comment #2有一个解决方法:

此问题的简化版本:

doc <- read_HTML('<HTML><p >First line<br />Second line</p>')# r2evan's solution:as.character(rvest::HTML_node(doc,xpath="//p"))##[1] "<p class=\"pp\">First line<br>Second line</p>"# rentrop@github's solution,simplifIEd:INNERHTML <- function(x,trim = FALSE,collapse = "\n"){    paste(xml2::xml_find_all(x,".//text()"),collapse = collapse)}INNERHTML(doc)## [1] "First line\nSecond line"
总结

以上是内存溢出为你收集整理的R:rvest提取innerHTML全部内容,希望文章能够帮你解决R:rvest提取innerHTML所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1134556.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存