при использовании Rvest, как приписать 'NA' к фрейму данных, когда в некоторых элементах нет требуемого элемента - PullRequest
0 голосов
/ 22 марта 2019

Я использую Rvest и Rselenium для очистки заголовков, количества больших пальцев и ссылок на изображения из http://zhihu.sogou.com/. Однако я замечаю, что, кажется, не все заголовки следуют за рисунком.Это означает, что в некоторых из этих элементов (заголовков) не было найдено ни одного элемента изображения.Поэтому я хочу вменить 'NA', если элемент изображения не отображается, и создать информационный кадр, включающий эти 3 переменные (заголовки, большие пальцы и ссылки на изображения)

Я пробовал map_df, но он возвращает сообщение об ошибке.

### scraping sougou zhihu thumbs up ,titles and picture links
library(RSelenium)
library(rvest)
library(stringr)
library(purrr)
url<-'http://zhihu.sogou.com/'
remDr<-remoteDriver(browserName='chrome')
remDr$open()
remDr$navigate(url)

remDr$findElement(using="xpath","//*[@id='hot_tab']/a")$clickElement()####click hot tab to find the target content

####loop to workaround AJAX
for (i in 1:5){
remDr$findElement("css","body")$sendKeysToElement(list(key="end"))
remDr$findElement("xpath","//*[@id='load_more']")$clickElement()
Sys.sleep(runif(1,3,5))
}

#get pagesource and form a dataframe
websrc<-remDr$getPageSource()[[1]]

df<-read_html(websrc)%>%
  html_nodes('ul.news-list')%>%
  map_df(~list(title=html_nodes(.x,".tit a")%>%html_text()%>%{if(length(.)==0) NA else .},
               thumbup=html_nodes(.x,".zan")%>%html_text()%>%{if(length(.)==0) NA else .},
               links=html_nodes(.x,"#content_wrapper img")%>%html_attr('src')%>%str_extract_all(.,"//img[^[:blank:]]+\\.jpg")%>%str_replace_all(.,pattern = "amp;",replacement = "")%>%{if(length(.)==0) NA else .}))


##Error in bind_rows_(x, .id) : Argument 3 must be length 100, not 1

Я ожидаю найти способ приписать 'NA', если в некоторых элементах не найден элемент изображения, поэтому я могу сопоставить, какие заголовки следуют со ссылкой на изображение, а какие нет.

...