r - NA 用于网络抓取中的空白

标签 r node.js web-scraping rvest

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

网页链接: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')

最佳答案

嗯,我不是网页抓取的专家(我刚刚尝试过几次),但我意识到这是一个令人厌烦的过程,需要进行大量的试验和错误。

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

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

希望对您有所帮助。

关于r - NA 用于网络抓取中的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45836827/

相关文章:

r - 更改点颜色和点周围框架/椭圆的颜色

r - 如何使用带有ddply或聚合返回向量(如Fivenum)的函数?

r - R中的分箱时间数据

ios - 无法在本地编译 Phonegap 应用程序

r - 如何找到采样值的索引?

arrays - 使用 NODEJS 从 JSON 中删除元素

node.js - 使用 process.nextTick 发出事件是否优于内联发出事件?

node.js - 如何使用 Node.js 抓取异步加载数据的网站?

python - 手动导航时抓取网页

python - 如何通过 Python Selenium 选择下拉菜单中的 href 选项?