2016-12-23 13 views
2

私はrvestを使用してDepartment of Laborデータをスクラブしようとしています。私は検索したいEINとPN(Web検索フォームのパラメータ)のリストを持っています。これまで私が持っていたことは次のとおりです。rvestを使用して検索フォームに記入し、添付ファイルをダウンロードしてください

library(rvest) 
library(magrittr) 

## URL to page with search form to be populated 
site <- "http://www.efast.dol.gov/portal/app/disseminate?execution=e1s1" 

session <- html_session(site) 

form <- session %>% 
    html_nodes("form") %>% 
    extract2(1) %>% 
    html_form() %>% 
    set_values(`ein` = "060646973", # example EIN 
      `pn` = "001") # example PN 

result <- submit_form(session, form) 

これは、計画のリストがあるページにつながります。しかし、私は結果ページをナビゲートして添付ファイルをダウンロードする方法を知るために十分に精通していません。ブラウザで簡単に実行できますが、タスクを自動化するためのスクリプトを作成したいと思います。

結果のウェブページをナビゲートし、RESTや他のパッケージを使用して添付ファイルをダウンロードしてください。どうもありがとうございます!

+0

Filing ID、Acknowledgement IDなどの他の検索パラメータを共有できますか。 –

+1

フォーム記入には 'RSelenium'が必要です。' rvest'だけでそれを行うことができれば驚くでしょう。 –

答えて

1

これはあなたの問題を解決するものではありません(RSeleniumを使用するのに役立つたくさんのRSelenium SOレスポンスとブログ記事があります)が、このサイトでは "なぜ"あなたは醜いのですか? RSeleniumのアプローチが動作するには、URLを使用して起動する必要があります)。

このサイトでは、JavaScriptと一緒にサーバーサイドで「Java Server Faces」を使用して、状態と拡張のナビゲーションを維持しています。実際ににはからhttps://www.efast.dol.gov/portal/app/disseminateに開始するので、バックエンドで正しくセッションを開始できます。

次の2つのフィールドに入力したら、それは(フォーマット「のcURLとしてコピー」で)次のようになりますPOST要求を行う:

curl -i -s -k 
    -X 'POST' 
    -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:43.0) Gecko/20100101 Firefox/43.0' 
    -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H 'Faces-Request: partial/ajax' 
    -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://www.efast.dol.gov/portal/app/disseminate?execution=e1s1' 
    -b 'JSESSIONID=0000UG27GxfJ4sVgFVXnUi3Ix9C:18fl2akcj' 
    --data-binary $'javax.faces.partial.ajax=true&javax.faces.source=form%3Anextbtn&javax.faces.partial.execute=%40all&javax.faces.partial.render=form&form%3Anextbtn=form%3Anextbtn&form=form&planName=&sponsorName=&administratorName=&filingId=&ackId=&ein=060646973&pn=001&form%3Aj_idt939%3Apybcalendar_input=&form%3Aj_idt942%3Apyecalendar_input=&formYear=&form%3AnumResults_input=100&form%3AnumResults_editableInput=100&javax.faces.ViewState=e1s1' 
    'https://www.efast.dol.gov/portal/app/disseminate?execution=e1s1' 

私はあなたが追加フィールドのいくつかを見てみましょうすることを投稿最初に<form>に直接送信されないものを送信します。

POSTのようなものであることをそれに応じて:のJava ServerはAJAXが最終的に提供<<table role="treegrid">(の実際の結果と結果ページにリダイレクトされるように、あなたの原因となる応答をリダイレクト顔

HTTP/1.1 200 OK 
X-Powered-By: Servlet/3.0 
Pragma: no-cache 
Expires: Thu, 01 Jan 1970 00:00:00 GMT 
Cache-Control: no-cache 
Cache-Control: no-store 
X-Powered-By: JSF/2.0 
X-Powered-By: JSF/2.0 
X-UA-Compatible: IE=EmulateIE7 
Content-Type: application/xml; charset=UTF-8 
Content-Language: en-US 
Date: Fri, 23 Dec 2016 13:10:26 GMT 
Content-Length: 142 
Connection: keep-alive 

<?xml version='1.0' encoding='UTF-8'?> 
<partial-response><redirect url="/portal/app/disseminate?execution=e1s2"></redirect></partial-response> 

それが返す恐ろしいHTMLの表をターゲットにするのに役立ちます)。

次に、チェックボックスをクリックして情報をダウンロードする方法を理解する必要があります。

自動ナビゲーションで誤った手順を実行すると、セッションが切断されます。だから、あなたは退屈な試行のために&エラーが発生する可能性がありますターゲットの選択操作が正しいことを確認します。

関連する問題