使用 rvest 获取文本时如何保持换行符
How to keep linebreaks when getting text with rvest
我正在从网站上提取法院判决书的文本,并希望保留换行符(我稍后需要进行文本分析)。不幸的是, 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 (which replaces html < br > with \n) and the discussion here 在 github。
请注意,换行符 \n 不仅出现在标题中(例如 < h1 >),而且出现在整个文本中(也包括 < p >)。
非常感谢。
问题是在调用 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__
我正在从网站上提取法院判决书的文本,并希望保留换行符(我稍后需要进行文本分析)。不幸的是, 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 (which replaces html < br > with \n) and the discussion here 在 github。
请注意,换行符 \n 不仅出现在标题中(例如 < h1 >),而且出现在整个文本中(也包括 < p >)。
非常感谢。
问题是在调用 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__