NA用于网络抓取中的空白

时间:2017-08-23 10:11:39

标签: r node.js web-scraping rvest

我想抓取下面提到的页面,但“ .trans-section ”节点中有一些空白。 '.trans-section'节点正在捕获' title '以及' description '。在某些表格中会有标题,但缺少描述。 当描述为空白时,我希望数据用NA填充 。由于两个节点都相同,我没有得到任何空白行。请帮忙。

Weblink: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')

2 个答案:

答案 0 :(得分:1)

好吧,我不是Web Scraping的专家(我刚试过几次),但我已经意识到这是一个令人讨厌的程序,有很多试验和错误。

也许你可以使用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()

行以避免出现端口已被使用的错误。

我希望它有所帮助。

答案 1 :(得分:0)

(未经测试)

您可以尝试添加选项:

function onAuthStateChanged(user) {...}