10

R でrvestを使用して Web ページをスクレイピングし、 node からに相当するものを抽出しinnerHTMLたいと思います。特に、適用する前に改行を改行に変更し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"

rvestxml2XMLまたは他のパッケージの既存の関数でこれを行うより良い方法はありますか? 特にハードディスクへの書き込みは避けたいです。

4

2 に答える 2