2016-11-21 54 views
1

我一直在試圖從這個網址刮取股票市場usinf「rvest」包:http://finans.mynet.com/borsa/canliborsa/#A需要註冊。我創建了虛擬帳戶供您試用。下面的用戶名和密碼是真實的,並且工作正常。 我已經想出如下:Rvest Web Scraping僅帶有列名的空數據表

library("rvest") 
library("data.table") 

url<- "http://uyeler.mynet.com/login/login.asp?rurl=http%3A%2F%2Ffinans.mynet.com%2Fborsa%2Fcanliborsa%2F&formname=finans#A" 
session<-html_session(url) 
form<- html_form(session)[[1]] 

login<- set_values(form, "username" ="muharrem_babaogul_1991","password"="q1w2e3") 
submit_form(session,login) 

jumped<-jump_to(session,url = 'http://finans.mynet.com/borsa/canliborsa/#A') 

page<- read_html(jumped) 
page<-html_nodes(page,xpath='//*[@id="canliLeftColumn"]/div[3]/table') 
page<- html_table(page) 
head(page[[1]]) 

而結果:

[1] Hisse   Hisse   Hisse   Son   Alış   
[6] Satış   %Fark   En Düşük  En Yüksek  AOF   
[11] Hacim (Lot) Hacim (TL) Son İşlem  Ekle/Kaldır 
<0 rows> (or 0-length row.names) 

正如你看到的,我可以使用XPath達到表中,我得到的列名,但沒有任何裏面的數據。表格是完全空的。 有沒有人可以幫忙? 在此先感謝。

+0

這些表格是通過javascript生成的。它看起來像你感興趣的數據是商店是一個'data.fdata'文件,但我不知道如何從一個安全的頁面請求它。看看這個答案:http://stackoverflow.com/questions/40638511/using-rvest-to-grab-data-returns-no-matches/40642507#40642507,這可能會有所幫助。 – Dave2e

+0

是@ Dave2e,數據來自fdata,所以我不能得到它,直到現在還不知道它。但是我依然無法設法刮掉它。因爲fdata url([here](http://finans.mynet.com/borsa/canliborsadata/data.fdata))也需要登錄。我不能使用上面的方式(sumbit_form和jump_to),因爲它給read_html(跳轉)函數的錯誤,該文件不是一個html文件。所以我在這個[link](https://stackoverflow.com/questions/24723606/scrape-password-protected-website-in-r)上爲我的問題嘗試瞭解決方案,並且在下面的評論中提供了代碼,但仍然不行。 – Barsssk

回答

2

問題已解決。感謝您的幫助@ Dave2e。我發現jump_to函數可以擦除數據並將其包含在$ response中。下面的代碼給出的數據爲txt,但只保留它。

url<- "http://uyeler.mynet.com/login/login.asp?rurl=http%3A%2F%2Ffinans.mynet.com%2Fborsa%2Fcanliborsa%2F&formname=finans#A" 
session<-html_session(url) 
form<- html_form(session)[[1]] 

login<- set_values(form, "username" ="muharrem_babaogul_1991","password"="q1w2e3") 
submit_form(session,login) 


jumped<-jump_to(session,url = 'http://finans.mynet.com/borsa/canliborsadata/data.fdata') 

file<-content(jumped$response,as="text")