Rvest eliminando notícias do Google com número diferente de linhas
Estou usando o Rvest para cancelar o Google News.
No entanto, encontro valores ausentes no elemento "Tempo" de vez em quando em diferentes palavras-chave. Como os valores estão faltando, ele acabará tendo "erro de número de linhas diferente" para o quadro de dados do resultado de sucateamento.
Existe alguma maneira de preencher NA para esses valores ausentes?
Abaixo está o exemplo do código que estou usando.
html_dat <- read_html(paste0("https://news.google.com/search?q=",Search,"&hl=en-US&gl=US&ceid=US%3Aen"))
dat <- data.frame(Link = html_dat %>%
html_nodes('.VDXfz') %>%
html_attr('href')) %>%
mutate(Link = gsub("./articles/","https://news.google.com/articles/",Link))
news_dat <- data.frame(
Title = html_dat %>%
html_nodes('.DY5T1d') %>%
html_text(),
Link = dat$Link,
Description = html_dat %>%
html_nodes('.Rai5ob') %>%
html_text(),
Time = html_dat %>%
html_nodes('.WW6dff') %>%
html_text()
)
Respostas
Sem saber a página exata que você estava vendo, tentei a primeira página de notícias do Google.
Na página Rvest, html_node
(sem os) sempre retornará um valor, mesmo que seja NA. Portanto, para manter os vetores do mesmo comprimento, é necessário encontrar o nó pai comum para todos os nós de dados desejados. Em seguida, analise as informações desejadas de cada um desses nós.
Supondo que o nó Título seja mais completo, suba 1 nível xml_parent()
e tente recuperar o mesmo número de nós de descrição, isso não funcionou. Em seguida, tentei 2 níveis usando xml_parent() %>% xml_parent()
, isso parece funcionar.
library(rvest)
url <-"https://news.google.com/topstories?hl=en-US&gl=US&ceid=US:en"
html_dat <- read_html(url)
Title = html_dat %>% html_nodes('.DY5T1d') %>% html_text()
# Link = dat$Link
Link = html_dat %>% html_nodes('.VDXfz') %>% html_attr('href')
Link <- gsub("./articles/", "https://news.google.com/articles/",Link)
#Find the common parent node
#(this was trial and error) Tried the parent then the grandparent
Titlenodes <- html_dat %>% html_nodes('.DY5T1d') %>% xml_parent() %>% xml_parent()
Description = Titlenodes %>% html_node('.Rai5ob') %>% html_text()
Time = Titlenodes %>% html_node('.WW6dff') %>% html_text()
answer <- data.frame(Title, Time, Description, Link)