2016-05-15 26 views
1

私はRの新しい学習者です。rvestを使用してhtmlテーブルを抽出し、htmlフォームを送信することに興味があります。rvestを使用してhtmlテーブルを抽出する

今、私は中国のウェブサイトから有用な情報を得たいと思います。 URLは次のとおりです。

http://caipiao.163.com/award/cqssc/20160513.html

私はRStudioバージョン0.99.896でWindows 10 Professionalを使用しています、私はXPATHヘルパーアドオンで、ウェブブラウザとしてGoogle Chromeを使用します。

中国のサイトからメインのhtmlテーブルを抽出したいと思っています。それは、宝くじ当選番号に関する120のグループの情報を含んでいます。最初の1つ(001)は:98446で、最後の1つ(120)は:01798です。私は数字(001)〜(120)と当選番号:98446から01798だけを抽出したいと思います。

XPATHを取得するためにXPATHヘルパーとChrome Web開発を使用しました。

私が欲しい情報をXPATHがあると思う:

//html/body/article[@class='docBody clearfix']/section[@id='mainArea']/div[@class='lottery-results']/table[@class='awardList']/*[@id="mainArea"]/div[1]/table/tbody/tr[2]/td[1] 

しかし、私はRStudioで次のコードを実行したとき、私は私が望む結果を得ることができません。 次は私のコードです:

> library(rvest) 
Loading required package: xml2 
> url <- "http://caipiao.163.com/award/cqssc/20160513.html" 
> xp <- "//html/body/article[@class='docBody clearfix']/section [@id='mainArea']/div[@class='lottery-results']/table[@class='awardList']/*[@id='mainArea']/div[1]/table/tbody/tr[2]/td[1]" 
> 
> x <- read_html(url) 
> y <- x %>% html_nodes(xpath=xp) 
> y 
{xml_nodeset (0)} 

> 

私のコードを見て、私はミスをした場合は私に知らせてください。それらの未知の漢字を無視することはできますが、それは重要ではありません。数字を取得したいだけです。

ありがとうございます! ジョン

答えて

0
私は一つだけ <table>要素があなたのウェブサイトのように、テーブル全体を取得するには、パッケージ XMLから機能 readHTMLTableを使用することになり

install.packages("XML) 
library(XML) 
url <- "http://caipiao.163.com/award/cqssc/20160513.html" 
lotteryResults <- as.data.frame(readHTMLTable(url)) 

が次にあなただけ行うことができますいくつかのクレンジング方法、サブセットとrbindを使用して2列120の観測値を持つdata.frameを取得します。

+0

あなたはそのコードを実行しましたか?私は、営業担当者がJSでいくつかの後処理を行っていることが分かりません – hrbrmstr

+1

こんにちは、ありがとう、あなたの解決策は良いと思われます。しかし、私のRレベルは十分ではありません、私は結果を見ることができます:1 001 9 8 4 4 6 ...しかし、私は '001'と '9 8 4 4 6'他の役に立たない情報の? –

1

table要素が1つしかないので(このような正確なターゲットセレクタを使用する必要はありません)(他の回答者も指摘したとおり)。しかし、あなたは背後rvestを残しする必要はありません。

library(rvest) 

URL <- "http://caipiao.163.com/award/cqssc/20160513.html" 

pg <- read_html(URL) 
tab <- html_table(pg, fill=TRUE)[[1]] 

str(tab) 

## 'data.frame': 40 obs. of 39 variables: 
## $ 期号 : int 1 2 3 4 5 6 7 8 9 10 ... 
## $ 开奖号码: chr "9 8 4 4 6" "1 8 3 1 6" "2 9 3 5 6" "1 4 5 8 0" ... 
## .... 

(SOので、私は他の列を削除する必要がありましたスパムとしてUnicodeのグリフのいくつかを解釈されます)。

2番目の列は、ページロード後のjavascriptアクションによって圧縮されます。その場合は、それを少し上にする必要があります。

+1

こんにちは、私のWindows 10では、私はごみコードのようにあなたのコードの外観から結果を見ることができますが、あなたの結果は読みやすい中国語のようです。私はこの行(str(タブ)の結果の3番目の行)を取得する方法を知りたい:#$开奖号码:chr "9 8 4 4 6" "1 8 3 1 6" "2 9 3 5 6" "1 4 5 8 0" ... と可能であれば、それらをSQL Serverのデータテーブルに保存する方法、日付:20160513(全120レコードで同じ)、注文番号:1〜120、宝くじ番号 "98446" ; "18316"; "29356"; "14580" ...各宝くじ番号は1つの注文番号(1〜120)に対応します。あなたのコードを共有してください。 –

関連する問題