Подтвердить что ты не робот

Как читать n-ю строку Parsed html в R

Функция readLines отображает все содержимое исходной страницы в одной строке.

con = url("target_url_here")
htmlcode = readLines(con)

Функция readLines объединила все строки исходной страницы в одной строке. Таким образом, я не могу перейти к 15-й строке на исходной исходной странице html.

Следующий подход - попытаться разобрать его с помощью пакета XML или пакета httr.

library("httr")
html <- GET("target_url_here")
content2 = content(html,as="text")
parsedHtml = htmlParse(content2,asText=TRUE)

Распечатав файл parsedHtml, он сохраняет html-формат и отображает все содержимое, как это видно на исходной странице. Теперь предположим, что хочу извлечь заголовок, поэтому функция

xpathSApply(parsedHtml,"//title",xmlValue)

даст название.

Но мой вопрос: как мне перейти к любой строке, скажем, 15-й строке html? Другими словами, как я могу рассматривать html как вектор строк, где каждый элемент вектора является отдельной строкой в ​​html-странице/анализированном html-объекте.

4b9b3361

Ответ 1

Чтобы лучше рассмотреть документы для readLines(), он возвращает:

Символьный вектор длины число прочитанных строк.

Итак, в вашем случае:

con = url("http://example.com/file_to_parse.html")
htmlCode = readLines(con)

вы можете легко сделать htmlCode[15] для доступа к строке 15 th на исходной исходной странице html.

Ответ 2

В ответ на ваш комментарий

Но есть ли способ перейти к 15-й строке в анализируемом HTML-объекте?

Есть несколько разных способов сделать это. Один упоминается lukeA в комментариях. Другим является использование capture.output() для получения анализируемого документа html по строке в виде символьного вектора. В этом примере используются данные примера из ?htmlParse

library(XML)
f <- system.file("exampleData", "9003.html", package = "XML")

Разберите html-документ:

( doc <- htmlParse(f) )
# <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
#     <html xmlns="http://www.w3.org/1999/xhtml">
#     <head>
#     <meta name="generator" content="HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org">
#     <title>BKA/RIS VwGH - Volltext</title>
#     <base target="_self">
#     </head>
#     <body>
#     Veröffentlichungsdatum
# </body>
#     </html>

Просмотр анализируемого документа в виде символьного вектора:

capture.output(doc)
# [1] "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">"
# [2] "<html xmlns=\"http://www.w3.org/1999/xhtml\">"                                                                 
# [3] "<head>"                                                                                                        
# [4] "<meta name=\"generator\" content=\"HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org\">"         
# [5] "<title>BKA/RIS VwGH - Volltext</title>"                                                                        
# [6] "<base target=\"_self\">"                                                                                       
# [7] "</head>"                                                                                                       
# [8] "<body>"                                                                                                        
# [9] "Veröffentlichungsdatum"                                                                                       
# [10] "</body>"                                                                                                       
# [11] "</html>"                                                                                                       
# [12] " "                                                                                                        

Получить (например,) 5-ю строку:

capture.output(doc)[5]
#[1] "<title>BKA/RIS VwGH - Volltext</title>"