【问题标题】:Loop URL and store info in R循环 URL 并在 R 中存储信息
【发布时间】:2016-07-28 21:01:29
【问题描述】:

我正在尝试编写一个 for 循环,它将遍历许多网站并提取一些元素,并将结果存储在 R 中的一个表中。这是我到目前为止的工作,只是不知道如何启动 for 循环,或将所有结果复制到一个变量中以便稍后导出。

library("dplyr")
library("rvest")
library("leaflet")
library("ggmap")


url <- c(html("http://www.webiste_name.com/")

agent <- html_nodes(url,"h1 span")
fnames<-html_nodes(url, "#offNumber_mainLocContent span")
address <- html_nodes(url,"#locStreetContent_mainLocContent")

scrape<-t(c(html_text(agent),html_text(fnames),html_text(address)))


View(scrape)

【问题讨论】:

    标签: r for-loop web-scraping


    【解决方案1】:

    鉴于您的问题不能完全重现,这里有一个玩具示例,它遍历三个 URL(Red Socks、Jays 和 Yankees):

    library(rvest)
    
    # teams
    teams <- c("BOS", "TOR", "NYY")
    
    # init
    df <- NULL
    
    # loop
    for(i in teams){
        # find url
        url <- paste0("http://www.baseball-reference.com/teams/", i, "/")
        page <- read_html(url)
        # grab table
        table <- page %>%
            html_nodes(css = "#franchise_years") %>%
            html_table() %>%
            as.data.frame()
        # bind to dataframe
        df <- rbind(df, table)
    }
    
    # view captured data
    View(df)
    

    循环有效,因为它用每个团队按顺序替换了paste0 中的i

    【讨论】:

      【解决方案2】:

      我会选择lapply

      代码如下所示:

      library("rvest")
      library("dplyr")
      
      #a vector of urls you want to scrape
      URLs <- c("http://...1", "http://...2", ....)
      
      df <- lapply(URLs, function(u){
      
            html.obj <- read_html(u)
            agent <- html_nodes(html.obj,"h1 span") %>% html_text
            fnames<-html_nodes(html.obj, "#offNumber_mainLocContent span") %>% html_text
            address <- html_nodes(html.obj,"#locStreetContent_mainLocContent") %>% html_text
      
           data.frame(Agent=agent, Fnames=fnames, Address=address)
      })
      
      df <- do.all(rbind, df)
      
      View(df)
      

      【讨论】:

      • 效果很好!如何进行调整以确保每次抓取的数据都存储在单独的行中?现在它将它们都存储在彼此相邻的位置
      • 我不确定我是否理解您的问题。在lapply 的data.frame 中,您可以使用以下data.frame(Agent=agent, Fnames=fnames, Address=address, URL=u) 来生成每一行对应的url
      • 我想通了,但是另一个问题,为什么我在尝试搜索站点时会收到这样的错误“错误:当前工作目录中不存在'www.website.com'”
      猜你喜欢
      • 2013-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-09
      • 2013-12-29
      • 1970-01-01
      • 2016-11-19
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多