Link 重定向问题 - 使用 Rvest 在 R 中进行 Web 抓取
Link redirection problem - Web Scraping in R using Rvest
当我使用 Rvest
工具从新闻网站抓取 links 时,我经常偶然发现 links 重定向到另一个 links。在那些情况下,我只能抓取第一个 link,而第二个 link 是实际包含数据的那个。例如:
library(dplyr)
library(rvest)
scraped.link <- "http://www1.folha.uol.com.br/folha/dinheiro/ult91u301428.shtml"
article.title <- read_html(scraped.link) %>%
html_nodes('body') %>%
html_nodes('.span12.page-content') %>%
html_nodes('article') %>%
html_nodes('header') %>%
html_nodes('h1') %>%
html_text()
article.title
#> character(0)
redirected.link <- "https://www1.folha.uol.com.br/mercado/2007/06/301428-banco-central-volta-a-intervir-no-mercado-para-deter-queda-do-cambio.shtml"
article.title <- read_html(redirected.link) %>%
html_nodes('body') %>%
html_nodes('.span12.page-content') %>%
html_nodes('article') %>%
html_nodes('header') %>%
html_nodes('h1') %>%
html_text()
article.title
#> "Banco Central volta a intervir no mercado para deter queda do câmbio"
有没有办法用第一个得到第二个link?本站只保留第一个
是的,页面通过 javascript `location.replace' 重定向,因此只需使用正则表达式提取 "location.replace" 第一个实例之后第一个引用的项目 html 脚本标签的文本:
library(dplyr)
library(rvest)
scraped.link <- "http://www1.folha.uol.com.br/folha/dinheiro/ult91u301428.shtml"
link.regex <- "(.*?location[.]replace.*?\")(.*?)(\".*)"
read_html(scraped.link) %>%
html_nodes('script') %>%
html_text() %>%
gsub(link.regex, "\2", .)
#> [1] "http://www1.folha.uol.com.br/mercado/2007/06/301428-banco-central-volta-a-intervir-
#> no-mercado-para-deter-queda-do-cambio.shtml"
当我使用 Rvest
工具从新闻网站抓取 links 时,我经常偶然发现 links 重定向到另一个 links。在那些情况下,我只能抓取第一个 link,而第二个 link 是实际包含数据的那个。例如:
library(dplyr)
library(rvest)
scraped.link <- "http://www1.folha.uol.com.br/folha/dinheiro/ult91u301428.shtml"
article.title <- read_html(scraped.link) %>%
html_nodes('body') %>%
html_nodes('.span12.page-content') %>%
html_nodes('article') %>%
html_nodes('header') %>%
html_nodes('h1') %>%
html_text()
article.title
#> character(0)
redirected.link <- "https://www1.folha.uol.com.br/mercado/2007/06/301428-banco-central-volta-a-intervir-no-mercado-para-deter-queda-do-cambio.shtml"
article.title <- read_html(redirected.link) %>%
html_nodes('body') %>%
html_nodes('.span12.page-content') %>%
html_nodes('article') %>%
html_nodes('header') %>%
html_nodes('h1') %>%
html_text()
article.title
#> "Banco Central volta a intervir no mercado para deter queda do câmbio"
有没有办法用第一个得到第二个link?本站只保留第一个
是的,页面通过 javascript `location.replace' 重定向,因此只需使用正则表达式提取 "location.replace" 第一个实例之后第一个引用的项目 html 脚本标签的文本:
library(dplyr)
library(rvest)
scraped.link <- "http://www1.folha.uol.com.br/folha/dinheiro/ult91u301428.shtml"
link.regex <- "(.*?location[.]replace.*?\")(.*?)(\".*)"
read_html(scraped.link) %>%
html_nodes('script') %>%
html_text() %>%
gsub(link.regex, "\2", .)
#> [1] "http://www1.folha.uol.com.br/mercado/2007/06/301428-banco-central-volta-a-intervir-
#> no-mercado-para-deter-queda-do-cambio.shtml"