2016-08-04 47 views
1

我開發了一些代碼來抓取基於this topic的流量數據。我需要在登錄後刮很多頁面,但現在我的代碼似乎反覆登錄每個網址的網站。如何「重用」會話以避免重複登錄,以便希望代碼可以更快運行?這裏的僞代碼:如何重複使用會話以避免在使用rvest進行重複登錄時重複登錄?

generateURL <- function(siteID){return siteURL} 

scrapeContent <- function(siteURL, session, filled_form){return content} 

mainPageURL <- 'http://pems.dot.ca.gov/' 
pgsession <- html_session(mainPageURL) 
pgform <- html_form(pgsession)[[1]] 
filled_form <- set_value(pgform, 'username'='myUserName', 'password'='myPW') 

siteIDList = c(1,2,3) 
vectorOfContent <- vector(mode='list', length=3) #to store all the content 

i=1 
for (siteID in siteIDList){ 
    url = generateURL(siteID) 
    content = scrapeContent(url, pgsession, filled_form) 
    vectorOfContent[[i]]=content 
    i = i +1} 

我讀了rvest文檔,但沒有這方面的細節。我的問題:如何'重新使用'會話以避免重複登錄?謝謝!

回答

1

你可以做這樣的事情:

require(rvest) 
pgsession <- html_session(mainPageURL) 
pgform <- html_form(pgsession)[[1]] 
filled_form <- set_value(pgform, 'username'='myUserName', 'password'='myPW') 
s <- submit_form(pgsession, pgform) # s is your logged in session 

vectorOfContent <- vector(mode='list', length=3) 

for (siteID in siteIDList){ 
    url <- generateURL(siteID) 
    # jump_to navigates within the session, read_html parses the html 
    vectorOfContent[[siteID]]=s %>% jump_to(generateURL) %>% read_html() 
    } 
+0

謝謝! jump_to()實質上就是我正在尋找的。回覆晚了非常抱歉。 – user3768495