2017-08-23 11 views
1

以下のページを削りたいですが、 ".trans-section"ノードに空白があります。 '.trans-section'ノードは、 'タイトル'と 'description'をキャプチャしています。いくつかのテーブルのタイトルがそこにありますが、説明がありません。 説明が空白のときにデータをNAで埋めたい場合。ノードは両方とも同じなので、私は空白行を取得していません。これで助けてください。ウェブスクレイピングで空白がない場合

Webリンク:https://patentscope.wipo.int/search/en/result.jsf?currentNavigationRow=5&prevCurrentNavigationRow=2&query=FP:(Gaming)&office=&sortOption=Pub%20Date%20Desc&prevFilter=&maxRec=39316&viewOption=All&listLengthOption=200

library(rvest) 
library(httr) 
library(XML) 


FinalD <- data.frame() 

for (i in 1:10) { 
rm(Data) 

## Creating web page 
Webpage <- paste0('https://patentscope.wipo.int/search/en/result.jsf?currentNavigationRow=',i,'&prevCurrentNavigationRow=1&query=&office=&sortOption=Pub%20Date%20Desc&prevFilter=&maxRec=64653917&viewOption=All&listLengthOption=100') 
Webpage <- read_html(Webpage) 

#Getting Nodes 
Node_Intclass <- html_nodes(Webpage,'.trans-section') 
Intclass <- data.frame(html_text(Node_Intclass)) 
Intclass$sequence <- seq(1:2) 

Node_Others <- html_nodes(Webpage,'.notranslate') 
Others <- data.frame(html_text(Node_Others)) 
Others$sequence <- seq(1:9) 

####Others 
Data <- data.frame(subset(Others$html_text.Node_Others.,Others$sequence == 1)) 
Data$ID <- subset(Others$html_text.Node_Others.,Others$sequence == 2) 
Data$Country <- subset(Others$html_text.Node_Others.,Others$sequence == 3) 
Data$PubDate <- subset(Others$html_text.Node_Others.,Others$sequence == 4) 
Data$IntClass <- subset(Others$html_text.Node_Others.,Others$sequence == 5) 
Data$ApplINo <- subset(Others$html_text.Node_Others.,Others$sequence == 7) 
Data$Applicant <- subset(Others$html_text.Node_Others.,Others$sequence == 8) 
Data$Inventor <- subset(Others$html_text.Node_Others.,Others$sequence == 9) 

###Content 
ifelse ((nrow(Intclass) == 200), 
    ((Data$Title <- subset(Intclass$html_text.Node_Intclass.,Intclass$sequence == 1))& 
    (Data$Content <- subset(Intclass$html_text.Node_Intclass.,Intclass$sequence == 2))), 
((Data$Title <- 0) & (Data$Content = 0))) 

#Final Data 
FinalD <- rbind(FinalD,Data) 
} 

write.csv(FinalD,'FinalD.csv') 

答えて

0

(未テスト)

あなたはオプションを追加しようとすることができます:

read_html(Webpage, options = c("NOBLANKS")) 
+0

"これはコメントですか?答えは – hrbrmstr

+0

です@hrbrmstrそれは本当ですが、私はコメントするには50の評判が必要です...さらに、私はスクリプトをテストしましたが、ページ... –

+0

@GeorgeSotiropoulos、ありがとうが、上記の構文は機能していません。 – Tanuvi

1

まあ、私は私が持っている(ウェブスクレイピングの専門家ではありませんよちょうど数回試しましたが)、試行錯誤の多い面倒な手順だと分かりました。

おそらく、ページが動的に生成されるので、RSeleniumパッケージを使用することができます。私の場合は動作しますが、一種の出力が乱雑になります。

library(RSelenium) 
library(rvest) 
library(dplyr) 
library(data.table) 
library(stringr) 
tables1 <- list() 
for (i in 1:10) { # i <- 1; i 
    ## Creating web page 
    url <- paste0('https://patentscope.wipo.int/search/en/result.jsf?currentNavigationRow=',i,'&prevCurrentNavigationRow=1&query=&office=&sortOption=Pub%20Date%20Desc&prevFilter=&maxRec=64653917&viewOption=All&listLengthOption=100') 
    rD <- rsDriver(browser="chrome") 
    remDr <- rD$client 

    remDr$navigate(url) 
    page <- remDr$getPageSource() 

    remDr$close() 

    table <- page[[1]] %>% 
    read_html() %>% 
    html_nodes(xpath='//table[@id="resultTable"]') %>% # specify table as there is a div with same id 
    html_table(fill = T) 

    table <- table[[1]] 

    tables1[[url]] <- table %>% as.data.table() 
    rm(rD) 
    gc()} 

は、私はまた、あなたがループの外で、読みたいページのリストを作成し、接続はあなたが残っていたページから引き続き失敗かのようにインデックスを作成することをお勧め。

また、接続が失敗した場合、ポートが既に使用されていると言うエラーを回避するために

rm(rD) 
    gc() 

ラインを実行します。

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

+0

ご協力ありがとうございます。私はこれを試し、あなたに結果を知らせます。 – Tanuvi

関連する問題