2017-06-21 10 views
1

Rを使用してWebからhtmlテーブルをスクラップする必要があります。1000行のページあたり1つのテーブルがあり、合計316ページあります。 最初のURLのリンクはここにある:「http://sumodb.sumogames.de/Query.aspx?show_form=0&columns=6&rowcount=5&showheya=on&showshusshin=on&showbirthdate=on&showhatsu=on&showintai=on&showheight=on&showweight=on&showhighest=onWeb-Scrapping - 複数ページR

それから私は、オフセットのみが(1000,2000,3000 ...、316000)をインクリメントしていると考え、他のURLに

これは私のコードですこれまでの1ページのために働い:

library(XML) 
    library(rvest) 

url <- read_html("http://sumodb.sumogames.de/Query.aspx?show_form=0&columns=6&rowcount=5&showheya=on&showshusshin=on&showbirthdate=on&showhatsu=on&showintai=on&showheight=on&showweight=on&showhighest=on") 

    table <- url %>% 
     html_nodes(".record") %>% 
     html_table(fill = TRUE) 
    table 

大きなテーブルの各ページのCSSセレクタは、最終的な目的は1つのCSVファイルで、テーブル全体を持つことである「.record」

です。

+0

質問は何ですか? – Rentrop

答えて

1

次のコードは、あなたが何をしているかを達成するはずですが、Webベースのクエリでは1ページごとに集中的な読み込みが行われるため、非常に時間がかかることに注意してください。

コードは、次の、前の、そして最後のボタンを利用してページを巡回します。これに対する注意点は、最初と最後の2つのページで、異なるCSSセレクタを持ち、したがって手動で行われます。

完了後に.txtファイルを整理する必要があります。あなたは、コードがテストのために迅速に実行したい場合は

library(XML) 
library(rvest) 

# Starting page URL 
url <- read_html("http://sumodb.sumogames.de/Query.aspx?show_form=0&columns=6&rowcount=5&showheya=on&showshusshin=on&showbirthdate=on&showhatsu=on&showintai=on&showheight=on&showweight=on&showhighest=on") 

# URL prefix 
urlPrefix <- "http://sumodb.sumogames.de/" 

# URL of last page 
lastURL <- url %>% 
    html_nodes('div+ div a+ a') %>% 
    html_attr("href") 
lastURL <- paste0(urlPrefix, lastURL) 
lastURL <- read_html(lastURL) 

# URL of second to last page 
penultimateURL <- lastURL %>% 
    html_nodes('div+ div a+ a') %>% 
    html_attr("href") 
penultimateURL <- paste0(urlPrefix, penultimateURL) 
penultimateURL <- read_html(penultimateURL) 

# Table of first page 
tabletemp <- url %>% 
    html_nodes(".record") %>% 
    html_table(fill = TRUE) 
tabletemp <- tabletemp[[1]] 
names(tabletemp) <- tabletemp[1, ] 
tabletemp <- tabletemp[-1, ] 

# Create and write first table to a .txt file 
write.table(tabletemp, 'table.txt', row.names = FALSE) 

# URL of second page 
nextURL <- url %>% 
    html_nodes('div+ div a:nth-child(1)') %>% 
    html_attr("href") 
nextURL <- paste0(urlPrefix, nextURL) 
nextURL <- read_html(nextURL) 

# Table of second page 
tabletemp <- nextURL %>% 
    html_nodes(".record") %>% 
    html_table(fill = TRUE) 
tabletemp <- tabletemp[[1]] 
names(tabletemp) <- tabletemp[1, ] 
tabletemp <- tabletemp[-1, ] 

# Append second table to .txt file 
write.table(tabletemp, 'table.txt', row.names = FALSE, col.names = FALSE, append = TRUE) 

# URL of third page 
nextURL <- nextURL %>% 
    html_nodes('div+ div a:nth-child(2)') %>% 
    html_attr("href") 
nextURL <- paste0(urlPrefix, nextURL) 
nextURL <- read_html(nextURL) 

# cyle through pages 3 to N - 2 
while(html_text(nextURL) != html_text(penultimateURL)){ 

    tabletemp <- nextURL %>% 
    html_nodes(".record") %>% 
    html_table(fill = TRUE) 
    tabletemp <- tabletemp[[1]] 
    names(tabletemp) <- tabletemp[1, ] 
    tabletemp <- tabletemp[-1, ] 

    write.table(tabletemp, 'table.txt', row.names = FALSE, col.names = FALSE, append = TRUE) 

    nextURL <- nextURL %>% 
    html_nodes('div+ div a:nth-child(3)') %>% 
    html_attr("href") 
    nextURL <- paste0(urlPrefix, nextURL) 
    nextURL <- read_html(nextURL) 

} 

# Table of penultimate page 
tabletemp <- penultimateURL %>% 
    html_nodes(".record") %>% 
    html_table(fill = TRUE) 
tabletemp <- tabletemp[[1]] 
names(tabletemp) <- tabletemp[1, ] 
tabletemp <- tabletemp[-1, ] 

# Append penultimate table to .txt file 
write.table(tabletemp, 'table.txt', row.names = FALSE, col.names = FALSE, append = TRUE) 

# Table of last page 
tabletemp <- lastURL %>% 
    html_nodes(".record") %>% 
    html_table(fill = TRUE) 
tabletemp <- tabletemp[[1]] 
names(tabletemp) <- tabletemp[1, ] 
tabletemp <- tabletemp[-1, ] 

# Append last table to .txt file 
write.table(tabletemp, 'table.txt', row.names = FALSE, col.names = FALSE, append = TRUE) 

# Checking number of rows in final table 
nrow(read.table('table.txt')) 

することは、単にCSSセレクタは、第1および第2のページのために変更する必要があることに注意して、最後のページまたは類似した何かに第五で起動してみてください。

私はこれが助けてくれることを願っています:)