从 R 中的网络抓取中提取数据的效率

Efficiency in extracting data from webscraping in R

这无疑非常简单,所以很抱歉,但我是网络抓取的新手,我正在尝试使用 rvest 在一次调用中提取多个数据点。让我们以下面的代码为例(注意我没有使用我在这个代码片段中用 xxxxxx.com 替换的实际网站):

univsalaries <- lapply(paste0('https://xxxxxx.com/job/p', 1:20,'/key=%F9%80%76&final=1&jump=1&PGTID=0d3408-0000-24gf-ac2b-810&ClickID=2'),
                   function(url_base){
                     url_base %>% read_html() %>% 
                       html_nodes('.salary') %>% 
                       html_text()
                   })

假设我想抓取另一个 html 节点 (.company)。显然我可以单独调用并获取该数据,但我想了解如何在同一个调用中提取信息的语法。

我试着把它放在下面的结构中,但是代码把我送到了调试器

 ....     function(url_base){
                                  url_base %>% read_html() %>% 
                                    Salary <- univsalaries %>% 
                                    html_nodes('.salary') %>% html_text()
                                    Company <- univsalaries %>% 
                                      html_nodes('.company') %>% html_text()
                                    dt<-tibble(Salary,Company) 
                                })

阅读网页一次,然后您可以从同一页中提取多个值。

library(purrr)
library(rvest)

univsalaries <- map(paste0('https://xxxxxx.com/job/p', 1:20,'/key=%F9%80%76&final=1&jump=1&PGTID=0d3408-0000-24gf-ac2b-810&ClickID=2'),
                       function(url_base){
                         webpage <- url_base %>% read_html() 
                         data.frame(Salary = webpage %>% html_nodes('.salary') %>% html_text(), 
                                    Company = webpage %>% html_nodes('.company') %>% html_text())
                       })

这将为您提供一个数据帧列表(每个 link 一个),如果您需要一个组合数据帧,则使用 map_df 而不是 map