【问题标题】:how to loop over zillow/realtor using rvest to pull links如何使用 rvest 遍历 zillow/realtor 来拉取链接
【发布时间】:2020-07-22 16:40:23
【问题描述】:

我目前正在使用 Rvest 尝试从以下 url 中提取所有链接:https://www.zillow.com/browse/homes/fl/miami-dade-county/ 下面的代码满足了我想要为一个 url 做的事情。

#dl packages
library(tidyverse)
library(rvest)
library(xml2)
library(stringi)
library(dplyr)
library(purrr)
library(stringr)

webpage <- "https://www.zillow.com/browse/homes/fl/miami-dade-county/"
webpage <- read_html(webpage)
url_ <- webpage %>%
html_nodes("a") %>%
html_attr("href")

我正在尝试为一个包含相同 URL(zillow.com/browse/homes/fl/ 但每个都以不同的县结尾)的数据框(称为 newurl)复制这个(for 循环或 lapply)。我已经尝试过循环和应用,但每次都会收到不同的错误。我在下面包含了我最近的错误和代码尝试。寻找有关用于满足我的需要或如何编辑现有代码的建议。谢谢。

我尝试了许多不同的代码,但我最近的代码如下。

bind_rows(lapply(newurl, function(x) {
data.frame(newurl=x, toc_entry=toc <- read_html(newurl[1]) %>%
           html_nodes("a") %>%
           html_attr("href"))
})) -> toc_entries

这会产生以下错误: UseMethod("read_xml") 中的错误: 没有适用于“data.frame”类对象的“read_xml”方法

【问题讨论】:

    标签: r web-scraping rvest xml2


    【解决方案1】:

    你可以试试这个:

    require(tidyverse)
    require(rvest)
    require(xml2)
    
    start_page <- "https://www.zillow.com/browse/homes/fl/miami-dade-county/"
    fl_urls <- start_page %>% 
      read_html %>% 
      html_nodes("section a") %>% 
      html_attr("href") %>% #gives you the link to all ZIP codes
      xml2::url_absolute(start_page) # convert to full URL
    
    name_url <- function(x, base = start_page){
      data_frame(
        name = html_text(x, trim = FALSE),
        url = html_attr(x, "href") %>% 
          xml2::url_absolute(base)
      )
    }
    
    fl_urls %>% 
      head(2) %>% # Only loop the first two entries of fl_urls - remove to loop all
      map(read_html) %>% 
      map(html_nodes, "section a") %>% 
      map_df(name_url)
    

    结果是什么

    # A tibble: 51 x 2
       name                                 url                                            
       <chr>                                <chr>                                          
     1 1000 Hardee Rd - 1191 S Alhambra Cir https://www.zillow.com/browse/homes/fl/miami-d…
     2 1195 S Alhambra Cir - 1250 S Alhamb… https://www.zillow.com/browse/homes/fl/miami-d…
     3 1250 S Alhambra Cir APT 17 - 1410 C… https://www.zillow.com/browse/homes/fl/miami-d…
     4 1410 Mantua Ave - 1508 Zoreta Ave    https://www.zillow.com/browse/homes/fl/miami-d…
     5 1509 Delgado Ave - 1540 Zuleta Ave   https://www.zillow.com/browse/homes/fl/miami-d…
     6 1541 Cecilia Ave - 3760 Bird Rd UNI… https://www.zillow.com/browse/homes/fl/miami-d…
     7 3760 Bird Rd UNIT 513 - 4100 Salzed… https://www.zillow.com/browse/homes/fl/miami-d…
     8 4100 Salzedo St APT 604 - 420 Vitto… https://www.zillow.com/browse/homes/fl/miami-d…
     9 4210 Anderson Rd - 4420 Anderson Rd  https://www.zillow.com/browse/homes/fl/miami-d…
    10 4420 Monserrate St - 4900 Suarez St  https://www.zillow.com/browse/homes/fl/miami-d…
    # … with 41 more rows
    

    希望这有助于理解循环的逻辑。

    【讨论】:

    • 谢谢,这很有帮助
    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多