r - 带 rvest 的循环
问题描述
我对这一切都很陌生,并且正在尝试通过一些有关 stackoverflow 的示例来建立我的信心。
我通过@RonakShah 找到了这个答案
并认为我会使用它,因为我熟悉 HTML 来建立我对循环的信心。
我的问题是我无法使循环工作。
有人可以指出我要去哪里错了吗?这是我通过留言板找到的零碎代码,但我没有得到任何地方!
library(rvest)
page<- (0:2)
urls <- list()
for (i in 1:length(page)) {
url<- paste0("https://concreteplayground.com/sydney/bars?page=",page[i])
urls[[i]] <- url
}
tbl <- list()
j <- 1
for (j in seq_along(urls)) {
tbl[[j]] <- urls[[j]] %>% read_html()
name <- tbl[[j]] %>% html_nodes('p.name a') %>%html_text() %>% trimws()
address <- tbl[[j]] %>% html_nodes('p.address') %>% html_text() %>% trimws()
links <- tbl[[j]] %>% html_nodes('p.name a') %>% html_attr('href')
data.frame(name, address, links)
j <- j+1
}
#convert list to data frame
tbl <- do.call(rbind, tbl)
解决方案
直接使用创建 url paste0
,无需循环。
library(rvest)
pages <- 1:2
urls <- paste0("https://concreteplayground.com/sydney/bars?page=", pages)
如果您将该页面上的代码放在一个函数中,您可以使用它map_df
来直接获取组合数据框。map_df
做for
循环和do.call(rbind, tbl)
一起的工作。
get_web_data <- function(url) {
webpage <- url %>% read_html()
name <- webpage %>% html_nodes('p.name a') %>%html_text() %>% trimws()
address <- webpage %>% html_nodes('p.address') %>% html_text() %>% trimws()
links <- webpage %>% html_nodes('p.name a') %>% html_attr('href')
data.frame(name, address, links)
}
purrr::map_df(urls, get_web_data)
推荐阅读
- mysql - 通过 Ionic 框架获取 mySQL 数据
- react-native - 将本机博览会上传图像反应到 django api
- javascript - 如何在javascript中将字符串作为命名对象推送到数组中?
- android - 需要帮助解析 XML 并进行改造
- python - 无法使用 SQLite 在 Pandas Dataframe 中选择具有空白单元格的行
- javascript - 使用 jQuery/Javascript 从 ID 更新 href
- android - 以编程方式设置 inputType 时,EditText 在某些设备上打开错误的键盘
- neo4j - Neo4j 列表不在另一个列表查询中
- node.js - 使用提交按钮/输入标签将数据插入猫鼬模式
- flutter - Flutter:类型“bool”不是类型转换中“RxBool”类型的子类型