2017-08-29 58 views
0

我知道如何在頁面分頁時循環,但我希望在一個循環函數中抓取多個信息/ html_nodes,但我不確定是否可以設置它。到目前爲止,我嘗試了以下。這基本上是一個jobsearch網站,我想要公司名稱,公司名稱和公開職位的數量。Rvest在一個函數中抓取多個數據

我用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並將其變爲一個列表。

+0

您不會將數據傳遞給函數中的兩個'html_nodes'調用。同時查看'purrr :: map_df',這可以使多個字段組合成一個數據框更容易。 – alistaire

+0

所以把ALT%>%read_html盈方最後的html_nodes應該修復它? – ReneKJ

+0

可能不是,因爲它看起來像你想把同樣的事情傳遞給第二個和第三個'html_nodes'調用。更可能的是,你需要將第一個管道的結果保存到變量中,並將其傳遞給其他變量,或者使用'lapply' /'purrr :: map'遍歷第一個節點集合,找到它的每個部分試圖提取,並將它們組裝成一個列表或data.frame。 – alistaire

回答

0

這是一個解決方案的開始。在這種情況下,只有14個網頁可以解析,有時使用循環更容易。有了這個頁面,for循環和lapply之間的時間就不重要了。

我注意到網頁的格式不一致,因此當數據丟失或不一致時,此解決方案需要額外的工作。這將在前2頁起作用,而在缺少概述的第三頁上將失敗。

library(rvest) 
urlingtek <- sprintf("https://www.jobindex.dk/virksomhedsoversigt/kanal/ingenioer?page=%d", 1:14) 

#define empty data frame to store all data 
alllistings<-data.frame() 

for (i in urlingtek){ 
    print(i) 
    #read the page just once 
    page<-read_html(i) 

    #parse company name 
    company<-page%>%html_nodes('.jix_company_name_link a') %>% html_text() 
    #remove blank company names 
    company<-trimws(company) 
    company<-company[nchar(company)>1] 
#parse company overview 
    overv<-page %>% html_nodes('.jix_companyindex_overview_ad_content') %>% 
    html_text() 
    #parse active information 
    active<-page %>% html_nodes('.jix_active a') %>% html_text() 

    #create temporary dataframe to store data from this loop 
    tempdf<-data.frame(company, overv, active) 
    #combine temp with all data 
    alllistings<-rbind(alllistings, tempdf) 
} 
+0

謝謝,當我遇到沒有任何描述的公司時,我會看到這個問題。當他們一個接一個地運行它時,這不是一個問題,因爲我合併並切出了一條路。但是,這段代碼肯定會給我一些解決方法,還有一些工作要做。 – ReneKJ