如何在使用rvest获取文本时保持换行符?

问题描述 投票:0回答:1

我正在从一个网站上提取法院判决书的文本,并希望保留断行符(这是我以后进行文本分析所需要的)。不幸的是。rvest's html_text 去掉了换行符,例如,原本用"/"分开的两个词就变成了简单的连词。例如 "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"

创建于2020-05-14,由 重读包 (v0.3.0)

我发现了一些有希望的线索,如何处理这个问题,但不幸的是,我的具体问题没有成功。参见例如 这里 (用\n取代html < br > )和讨论。此处 github上。

请注意,换行符 n不仅出现在标题中(如< h1 >),而且出现在整个文本中(也有< p >)。

非常感谢。

r web-scraping rvest stringr xml2
1个回答
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__
© www.soinside.com 2019 - 2024. All rights reserved.