2017-08-29 2 views
0

ページが改ページされたときにループする方法を知っていますが、複数の情報/ html_nodesを1つのループ関数で削りたいと思っています。これまで私は以下のことを試みました。基本的に求職者のウェブサイトで、会社名、会社の説明、オープンポジションの番号が必要です。1つの関数内で複数のデータを削り取る

私はsprintfを使用して1-14ページを取得します。

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

私は1つのデータソースをこすりする働きループを作ってきました。

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を押して1つのリストにしてください。

+0

関数内の2つの 'html_nodes'呼び出しにデータを渡していません。 'purrr :: map_df'もチェックしてください。複数のフィールドをdata.frameに簡単に組み立てることができます。 – alistaire

+0

だからalt%>%read_html infrontの最後のhtml_nodesを修正する必要がありますか? – ReneKJ

+0

2番目と3番目の 'html_nodes'呼び出しに同じものを渡したいと思うので、おそらくそうではありません。おそらく、最初のパイプラインの結果を変数に保存し、それを他のものに渡す必要があります。あるいは、 'lapply' /' purrr :: map'を使って最初のノード集合を反復処理し、それらを抽出してリストやdata.frameにアセンブルしようとしています。 – alistaire

答えて

0

解決策の開始点です。この場合、解析するWebページが14個しかないため、ループを使用する方が簡単な場合があります。この数のページでは、forループとlapplyの間の時間は重要ではありません。

ウェブページが一貫してフォーマットされていないので、データが不足しているか矛盾している場合には、このソリューションで追加の作業が必要になります。これは、最初の2ページでは機能し、概要がない場合は3番目のページで失敗します。

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

ありがとうございます、私は説明なしで会社を打つとき、問題を参照してください。 1つ1つずつ実行すると、私はそれを統合して切り出したので問題にはなりませんでした。しかし、このコードは間違いなく私に働きかける方法を提供します。 – ReneKJ

関連する問題