web-dev-qa-db-ja.com

Rで解析されたhtmlのn行目を読み取る方法

ReadLines関数は、ソースページのすべてのコンテンツを1行で表示します。

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

readLines関数は、ソースページのすべての行を1行に連結しました。したがって、元のhtmlソースページの15行目に移動する方法はありません。

次のアプローチは、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)

タイトルを付けます。

しかし、私の質問は、htmlの15行目と言う行に移動するにはどうすればよいですか?言い換えると、htmlを文字列のベクトルとして扱うにはどうすればよいですか。ベクトルの各要素はhtmlページ/解析されたhtmlオブジェクトの個別の行です。

13
Novneet Nov

readLines() のドキュメントをよく見ると、実際には次のようになります。

読み取られた行数の長さの文字ベクトル。

だからあなたの場合:

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

簡単にhtmlCode[15]15にアクセスするにはth 元のhtmlソースページの行。

16
Marius Butuc

あなたのコメントに応えて

しかし、解析されたHTMLオブジェクトの15行目に移動する方法はありますか?

これを行うには、いくつかの異なる方法があります。 1つはコメントの中でlukeAによって言及されています。もう1つは、capture.output()を使用して、解析されたhtmlドキュメントを1行ずつ文字ベクトルとして取得することです。この例では、?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>"
5
Rich Scriven

私はこれがうまく機能することを発見しました、それは滑らかではありません、しかしそれは仕事を成し遂げます。

library(XML)
url <-"your desired website"
html <-htmlTreeParse(url, useInternalNodes = T)
text <-readLines(url)
text
nchar (text[15])
0
alittleloopy