2016-12-23 3 views
2

Ich versuche, Department of Labor Daten mit Hilfe von rvest zu kratzen. Ich habe eine Liste von EINs und PNs (Parameter im Websuchformular), nach denen ich suchen möchte. Hier ist, was ich bisher habe:Verwenden Sie rvest, um Suchformular auszufüllen und Anhänge herunterladen

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) 

Dies führt zu einer Seite, wo es eine Liste von Plänen gibt. Ich bin jedoch nicht vertraut genug, um zu wissen, wie ich auf der Ergebnisseite navigieren und die Anhänge herunterladen kann. Es ist leicht im Browser zu erreichen, aber ich möchte ein Skript schreiben, um die Aufgabe zu automatisieren.

Jede Hilfe beim Navigieren der resultierenden Webseite und Herunterladen von Anhängen mit rvest oder einem anderen Paket in R wäre sehr willkommen. Ich danke dir sehr!

+0

Können Sie andere Suchparameter teilen, z. B. Anmelde-ID, Bestätigungs-ID. –

+1

Sie benötigen 'RSelenium' für die Formularfüllung, ich wäre überrascht, wenn Sie das mit' rvest' alleine machen könnten. –

Antwort

1

Dies löst Ihr Problem nicht (es gibt viele RSelenium SO-Antworten und Blog-Posts, die Ihnen helfen, RSelenium zu verwenden), aber das "warum" müssen Sie für diese Website hässlich sein (und es gibt einen Zeiger für wo Sie müssen URL-weise starten, damit der RSelenium-Ansatz funktioniert.

Die Seite verwendet "Java Server Faces" auf der Serverseite zusammen mit Javascript, um die Status- und erweiterte Navigation zu verwalten. Sie werden haben, um bei https://www.efast.dol.gov/portal/app/disseminate zu starten, damit das hintere Ende Ihre Sitzung richtig beginnen kann.

Sobald Sie in den beiden Feldern füllen, macht es eine POST Anforderung, die (in „Copy als curl“ Format) wie folgt aussieht:

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' 

ich schreiben Sie einige der zusätzlichen Felder sehen zu lassen, es behauptet, dass nicht direkt in der <form> zunächst.

Die Antwort darauf, dass POST ist so etwas wie:

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> 

die ein Java-Server ist Faces AJAX Antwort umleiten, die letztlich bewirkt, dass Sie auf der Ergebnisseite mit den tatsächlichen Ergebnissen in einem <<table role="treegrid"> (vorausgesetzt umgeleitet werden helfen Sie, die Tabelle in dem schrecklichen HTML zu adressieren, das es zurückbringt).

Sie müssen dann herausfinden, wie Sie sicherstellen können, dass Sie auf die Kontrollkästchen klicken und die Informationen herunterladen können.

Jeder Fehlschritt in der automatisierten Navigation führt zum Abbruch der Sitzung. Also, Sie können für eine langwierige Probe & Fehler, um sicherzustellen, dass die Zielauswahl Aktionen korrekt sind.

Verwandte Themen