【发布时间】:2018-02-07 01:41:40
【问题描述】:
我知道当页面分页时如何循环,但我希望在一个循环函数中抓取多个信息/html_nodes,但我不确定你是否可以设置它。到目前为止,我已经尝试了以下方法。它基本上是一个求职网站,我想要公司名称、公司描述和空缺职位数量。
我使用sprintf 获取第 1-14 页。
urlingtek <- sprintf("https://www.jobindex.dk/virksomhedsoversigt/kanal/ingenioer?page=%d", 1:14)
我做了一个循环,它可以抓取一个数据源。
company <- function(virksomhed){
company %>% read_html() %>%
html_nodes('.jix_company_name_link a') %>%
html_text()
}
virk <- lapply(urlingtek, virksomhed)
但如果可能的话,我希望一次将所有实用程序都清理掉。
到目前为止,我已经尝试过使用
jobvirksom <- function(alt){
alt %>%
read_html() %>%
html_nodes('.jix_company_name_link a') %>%
html_text()
html_nodes('.jix_companyindex_overview_ad_content') %>%
html_text()
html_nodes('.jix_active a') %>%
html_text()
}
到目前为止没有任何运气。如果我能一次刮掉它会好很多,按lapply并变成一个列表。
【问题讨论】:
-
您没有将数据传递给函数中的两个
html_nodes调用。还可以查看purrr::map_df,它可以更轻松地将多个字段组合到一个 data.frame 中。 -
那么把 alt%>%read_html 放在最后一个 html_nodes 前面应该可以解决吗?
-
可能不会,因为看起来您想将相同的内容传递给第二个和第三个
html_nodes调用。更有可能您需要将第一个管道的结果保存到一个变量并将其传递给其他变量,或者使用lapply/purrr::map迭代第一个节点集,找到您正在尝试的每个部分提取并将它们组合成一个列表或 data.frame。
标签: r web-scraping html-parsing rvest