1

R で HTML ファイルからデータを抽出したいと思います。この構造の大きなファイルがあります。

a <-  "</span>Cabildo \t456\t386\t70\t21\t4\t101\t36\t12\t88\t48\t84\t62\t-</p></td></tr><tr><td colspan=\"14\" bgcolor=\"#CCDDE7\"><p class=\"s3\" style=\"padding-top: 1pt;padding-left: 5pt;text-indent: 0pt;text-align: left;\"><span style=\" color: black; font-style: normal; font-weight: normal;\"></span>Sierra Gorda\t106 \t89 \t17 \t-\t-\t26 \t9 \t8 \t15 \t10 \t18 \t20 \t-</p>"

ファイルの例: http://dl.getdropbox.com/u/18116710/file.htm

このパターンですべての行を抽出したい:

</span>Cabildo \t456\t386\t70\t21\t4\t101\t36\t12\t88\t48\t84\t62\t-</p>

次のようなデータベースを取得します。

Cabildo      456 386 70 21  4 101 36 12 88 48 62 -
Sierra Gorda 106  89 17  -  -  26  9  8 15 10 20 -
...

「-」は欠落 (NA) を意味します。結果なしで str_extract 関数で遊んでいます(正規表現は初めてです)。

私の考えは、その間にあるものを取得して </span>から</p>read.csv (タブ区切り記号付き) を使用して行を読み取ることですが、他のものがそれらのタグの間にある可能性があるため、これは最善の方法ではない可能性があります。

なにか提案を?

4

2 に答える 2

2

これにより、何をすべきかがわかります -

# break the string at each occurrence of </span> or </p>
b <- unlist(strsplit(a,"</span>|</p>"))
# removing the first element, which is just a blank
b <- b[-1]

# remove unneeded elements by looking for the </td> tag and filtering them out, this logic can be changed depending on how the complete dataset looks
c <- grep(x = b, pattern =  "</td>", invert = TRUE, value = TRUE)

# breaking each string b/w </span> and </p> into individual columns, split by '/t'
d <- (strsplit(c,"\t"))

# appending all rows together to get one dataset
e <- data.frame(do.call(rbind,d))

出力 -

> e
            X1   X2  X3  X4 X5 X6  X7 X8 X9 X10 X11 X12 X13 X14
1     Cabildo   456 386  70 21  4 101 36 12  88  48  84  62   -
2 Sierra Gorda 106  89  17   -  - 26  9  8  15  10  18  20    -
于 2013-11-03T05:18:30.990 に答える
1

この html ファイルがたくさんある場合は、次のパッケージを参照してください: http://www.rexamine.com/resources/stringi/

stringr パッケージよりも正規表現関数の実装が高速です。このパッケージをインストールするには、次を実行します。

source('http://static.rexamine.com/packages/stringi_install.R')

例:

stri_split_regex(a, "</span>|</p>")
于 2013-11-03T09:12:01.303 に答える