我正在尝试进行网页剪贴,但失败了。使用R

时间:2020-07-09 13:06:10

标签: r loops web-scraping rvest

每个人。我知道这很愚蠢,我不会问我是否没有在这里检查每个 for循环答案。

但是我需要刮取95页,但我不知道该如何循环。

这是代码:

url <- "https://www.riksdagen.se/sv/Dokument-Lagar/?datum=2000-01-01&q=kvinn&st=2&tom=2018-12-31&doktyp=fr&p="

page <- read_html(url)
title_html <- html_nodes(page,'.medium-big')    
text_html <- html_nodes(page,'.font-bold')   
full_html <- html_nodes(page, '.medium-smaller')
text_html[[21]] <- NULL
full_html[c(1, 21, 22)] <- NULL
title <- html_text(title_html)
text <- html_text(text_html)
full <- html_text(full_html)
frame <- data.frame(title, text, full) 

除了我需要逐页浏览外,它为我提供了我需要的一切。我正在使用rvest和dplyr。

谢谢。

2 个答案:

答案 0 :(得分:0)

我假设您将url变量归纳为字符串url的向量。如果是这样,您可以执行以下操作

urls <- c("url1", "url2", "url3")

myScrape <- function(url) {
   age <- read_html(url)
   title_html <- html_nodes(page,'.medium-big')    
   text_html <- html_nodes(page,'.font-bold')   
   full_html <- html_nodes(page, '.medium-smaller')
   text_html[[21]] <- NULL
   full_html[c(1, 21, 22)] <- NULL
   title <- html_text(title_html)
   text <- html_text(text_html)
   full <- html_text(full_html)
   data.frame(title, text, full) 
}

all_pages <- lapply(urls, myScrape)

您将需要使用代码来将其转换为所需的格式(例如,通常不使用数据帧列表),但是脚本现在循环了!

答案 1 :(得分:0)

基本上您可以这样做,但是我认为您的代码在有关每个页面的最后full_html信息方面存在问题:

library(rvest)
url <- "https://www.riksdagen.se/sv/Dokument-Lagar/?datum=2000-01-01&q=kvinn&st=2&tom=2018-12-31&doktyp=fr&p="

data <- NULL
for (i in 1:95){
  page <- read_html(paste0(url, i))
  title_html <- html_nodes(page,'.medium-big')    
  text_html <- html_nodes(page,'.font-bold')   
  full_html <- html_nodes(page, '.medium-smaller')
  text_html[[21]] <- NULL
  full_html[c(1, 21, 22)] <- NULL
  title <- html_text(title_html)
  text <- html_text(text_html)
  full <- html_text(full_html)
  frame <- data.frame(title, text, full) 
  data <- rbind(data, frame)
}