12

Rを使用してこのページをスクレイプしたいと思います:(http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html)など、ゴールの得点者と時間を取得します。

これまでのところ、これは私が持っているものです:

require(RCurl)
require(XML)

theURL <-"http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html"
webpage <- getURL(theURL, header=FALSE, verbose=TRUE) 
webpagecont <- readLines(tc <- textConnection(webpage)); close(tc)  

pagetree <- htmlTreeParse(webpagecont, error=function(...){}, useInternalNodes = TRUE)

そして、pagetreeオブジェクトには、解析されたhtmlへのポインターが含まれています(私は思います)。私が欲しい部分は:

<div class="cont")<ul>
<div class="bold medium">Goals scored</div>
        <li>Philipp LAHM (GER) 6', </li>
        <li>Paulo WANCHOPE (CRC) 12', </li>
        <li>Miroslav KLOSE (GER) 17', </li>
        <li>Miroslav KLOSE (GER) 61', </li>
        <li>Paulo WANCHOPE (CRC) 73', </li>
        <li>Torsten FRINGS (GER) 87'</li>
</ul></div>

しかし、私は今、それらをどのように隔離するかについて迷っています、そして率直に言って、私からbeejeebiesxpathSApplyを混乱させます!xpathApply

<div class="cont">それで、タグ内に含まれる要素を吸い出すコマンドを作成する方法を知っている人はいますか?

4

1 に答える 1

17

これらの質問は、RでWebスクレイピングとXMLを扱うときに非常に役立ちます。

  1. XMLパッケージを使用してhtmlテーブルをRデータフレームにスクレイピングする
  2. XMLデータをdata.frameに変換する方法は?

あなたの特定の例に関して、あなたが出力をどのように見せたいかはわかりませんが、これは文字ベクトルとして「得点された目標」を取得します。

theURL <-"http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html"
fifa.doc <- htmlParse(theURL)
fifa <- xpathSApply(fifa.doc, "//*/div[@class='cont']", xmlValue)
goals.scored <- grep("Goals scored", fifa, value=TRUE)

このxpathSApply関数は、指定された基準に一致するすべての値を取得し、それらをベクトルとして返します。class='cont'のdivを探していることに注意してください。クラス値は優れたマーカーであるため、クラス値を使用することは、HTMLドキュメントを解析するための優れた方法であることがよくあります。

これは好きなようにクリーンアップできます。

> gsub("Goals scored", "", strsplit(goals.scored, ", ")[[1]])
[1] "Philipp LAHM (GER) 6'"    "Paulo WANCHOPE (CRC) 12'" "Miroslav KLOSE (GER) 17'" "Miroslav KLOSE (GER) 61'" "Paulo WANCHOPE (CRC) 73'"
[6] "Torsten FRINGS (GER) 87'"
于 2010-06-08T15:42:12.973 に答える