使用RVest获取文本时如何保持换行符

时间:2020-05-13 22:31:22

标签: r web-scraping rvest stringr xml2

我正在从网站上提取法院判决书的文本,并希望保留换行符(稍后需要进行文本分析)。不幸的是,rvest's html_text删除了换行符,例如最初由\ n分隔的两个单词将简单地连接在一起。例如,“ GerichtAsylgerichtshof”实际上应该是“ Gericht \ nAsylgerichtshof”。

library(rvest, quietly = T, warn.conflicts = F)
library(tidyverse, quietly = T, warn.conflicts = F)

test_url <- "https://www.ris.bka.gv.at//Dokumente/AsylGH/ASYLGHT_20131125_E5_408_113_1_2009_00/ASYLGHT_20131125_E5_408_113_1_2009_00.html"

test_url_parsed <- test_url %>% 
  xml2::read_html() %>% 
  rvest::html_nodes(".contentBlock") 
test_url_parsed
#> {xml_nodeset (5)}
#> [1] <div class="contentBlock">\n<h1 class="Titel AlignJustify">Gericht</h1>\n ...
#> [2] <div class="contentBlock">\n<h1 class="Titel AlignJustify">Entscheidungsd ...
#> [3] <div class="contentBlock">\n<h1 class="Titel AlignJustify">Geschäftszahl< ...
#> [4] <div class="contentBlock">\n<h1 class="Titel AlignJustify">Spruch</h1>\n< ...
#> [5] <div class="contentBlock">\n<h1 class="Titel AlignJustify">Text</h1>\n<p  ...

#linebreak gets lost
x <- test_url_parsed %>% 
  html_text()
x[1]
#> [1] "GerichtAsylgerichtshof"

reprex package(v0.3.0)于2020-05-14创建

我找到了一些有前途的线索来解决此问题,但是不幸的是我的具体问题未能成功。参见例如here(用\ n替换html
)和github上的讨论here

请注意,换行符\ n不仅出现在标题中(例如

),而且出现在整个文本中(还有

)。

非常感谢。

1 个答案:

答案 0 :(得分:1)

问题是您在调用html_text之前没有进入树的最深层。

如果您在工作级别的子级列表中以sapply的身份运行它,则会得到每一行作为向量的元素。例如节点1:

html_children(test_url_parsed[[1]]) %>% html_text
[1] "Gericht"         "Asylgerichtshof"

然后,您必须将零件粘贴在一起:

html_children(test_url_parsed[[1]]) %>% html_text %>% paste0(collapse = "\n")
[1] "Gericht\nAsylgerichtshof"

以下代码对所有节点contentBlock节点及其子节点运行该操作:

> resPaste <- lapply(sapply(FUN = html_children, X = test_url_parsed), function(node) paste0(html_text(node), collapse = "\n"))

这将产生您想要的结果:

> str(resPaste)
List of 5
 $ : chr "Gericht\nAsylgerichtshof"
 $ : chr "Entscheidungsdatum\n25.11.2013"
 $ : chr "Geschäftszahl\nE5 408113-1/2009"
 $ : chr "Spruch\nZl. E5 408.113-1/2009/13E\n\nIM NAMEN DER REPUBLIK!\n\nDer Asylgerichtshof hat durch die Richterin Dr. "| __truncated__
 $ : chr "Text\nEntscheidungsgründe:\n\nI. Verfahrensgang und Sachverhalt:\n\nI.1.1. Der Beschwerdeführer, ein irakischer"| __truncated__
相关问题