[英]Webscraping in R: How to deal with redirects?
在過去的幾周里,我為瑞士的幾個新聞網站建立了一個網絡爬蟲。 他們中的大多數都可以工作,但是一頁給了我很多重定向,我不知道該怎么做。
這是我的代碼:
library(rvest)
library(tidyverse)
library(dplyr)
api20min<- read_xml('https://api.20min.ch/rss/view/1')
urls_20min <- api20min %>% html_nodes('link') %>% html_text()
urls_20min <- urls_20min[-c(1:2)]
zeit_20min <- api20min %>% html_nodes('pubDate') %>% html_text()
titel_20min <- api20min %>% html_nodes('title') %>% html_text()
titel_20min <- titel_20min[-c(1:2)]
df20min_titel_zeit_link <- data.frame(urls_20min,zeit_20min,titel_20min)
df20min_text <- do.call(rbind, lapply(urls_20min, function(x) {
paste0(read_html(x) %>% html_nodes('.story_text p') %>% html_text(), collapse = "\n\n")
}))
df_20min <- data.frame(df20min_titel_zeit_link,df20min_text)
如果我在其他頁面上運行相同的代碼,它會完美運行。 實際上,我上周寫了這個,然后它仍然有效。 但現在 R 告訴我:
“open.connection(x,“rb”)中的 Fehler:最多(10)個重定向跟隨“
那么我怎樣才能圍繞這些重定向進行 go 呢?
謝謝你們的幫助,你們太棒了!
如果將 lapply 轉換為循環,您會發現是 urls_20min 中 position 23 處的urls_20min
導致了問題。 這是一個促銷鏈接,因此是重定向。 您可以簡單地找出任何帶有“ grepl
”的網址,它工作得很好:
library(rvest)
library(tidyverse)
library(dplyr)
api20min <- read_xml('https://api.20min.ch/rss/view/1')
urls_20min <- api20min %>% html_nodes('link') %>% html_text()
urls_20min <- urls_20min[-c(1:2)]
no_promo <- !grepl("promo", urls_20min)
zeit_20min <- api20min %>% html_nodes('pubDate') %>% html_text()
titel_20min <- api20min %>% html_nodes('title') %>% html_text()
titel_20min <- titel_20min[-c(1:2)]
df20min_titel_zeit_link <- data.frame(urls_20min,zeit_20min,titel_20min)[no_promo,]
df20min_text <- do.call(rbind,
lapply(urls_20min[no_promo],
function(x) {
paste0(read_html(x) %>%
html_nodes('.story_text p') %>%
html_text(),
collapse = "\n\n")}))
df_20min <- data.frame(df20min_titel_zeit_link, df20min_text)
結果太大而無法顯示,但這是它的結構:
str(df_20min)
#> 'data.frame': 111 obs. of 4 variables:
#> $ urls_20min : Factor w/ 112 levels "https://beta.20min.ch/story/269082903107?legacy=true",..: 44 78 93 49 81 76 91 70 95 4 ...
#> $ zeit_20min : Factor w/ 111 levels "Fri, 10 Apr 2020 03:00:00 GMT",..: 98 89 61 90 105 99 109 84 82 83 ...
#> $ titel_20min : Factor w/ 112 levels " : Die Bilder des Tages",..: 44 48 55 76 16 20 6 17 112 63 ...
#> $ df20min_text: Factor w/ 87 levels "","\n\n","\n\n(20 Minuten)",..: 62 44 48 71 64 43 83 39 30 1 ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.