2014-10-02 18 views
5

R'de RCurl paketinin getURL işlevini kullanarak bir API'den sayfalarda veri kazımaya çalışıyorum. Sorun şu ki yanıtı yineleyemiyorum R'yi kullanarak istekte bulunduğumda Chrome’da URL’yi açtığımda görüyorum. Esasen, Chrome’daki API sayfasını (aşağıda URL) açtığımda iyi çalışıyor ancak R’de getURL’i kullanmamı istesem (veya gizli modunu kullanarak Chrome) '500 Dahili Sunucu Hatası' yanıtı alıyorum ve aradığım güzel JSON'u değil. Söz konusu'RCurl' [R] paketi, kazıma sırasında getURL web sayfası hatası API

URL/API: İşte http://www.bluenile.com/api/public/loose-diamond/diamond-details/panel?country=USA&currency=USD&language=en-us&productSet=BN&sku=LD04077082

benim (başarısız) [R] istek.

test2 <- fromJSON(getURL("http://www.bluenile.com/api/public/loose-diamond/diamond-details/panel?country=USA&currency=USD&language=en-us&productSet=BN&sku=LD04077082", ssl.verifypeer = FALSE, useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36")) 

Araştırmam çok Uzak Öncelikle yığın bu önceki soruya bakıp (sorunu çözmek yoktu ama yine de gerekli olabilir) isteğine benim kullanıcı aracısı eklenen: ViralHeat API issues with getURL() command in RCurl package

Sonraki ÇözümHakkında R Disparity between browser and GET/getURL

benim Fikirler: Ben gerekçesini kılavuzluk bu yararlı yazı baktıBu benim uzmanlık alanım değil ama tahminim, isteğin, isteği tamamlamak için gereken bir çerez içermemesidir (bu nedenle tarayıcımda neden gizli modda çalışmıyor).

Başarılı isteği: enter image description here

Başarısız istek:

enter image description here

Herkes herhangi bir fikir var ben başarısız isteğine başarılı isteği istekleri ve yanıtları karşılaştırıldı? Yaptığım 2. postada MrFlick tarafından önerilen RSelenium paketini kullanmayı denemeliyim.

cevap

6

Bu kibar bir site. Size daha iyi bir kullanıcı deneyimi sunmak için kullandığınız para biriminden nereden geldiğini bilmek istersiniz. Bunu, açılış sayfasında çok sayıda çerez ayarlayarak yapar. Bu yüzden o zaman sayfa istediğimiz git aynısını ve açılış sayfası ilk çerezleri alma gidin:

library(RCurl) 
myURL <- "http://www.bluenile.com/api/public/loose-diamond/diamond-details/panel?country=USA&currency=USD&language=en-us&productSet=BN&sku=LD04077082" 
agent="Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0" 

#Set RCurl pars 
curl = getCurlHandle() 
curlSetOpt(cookiejar="cookies.txt", useragent = agent, followlocation = TRUE, curl=curl) 
firstPage <- getURL("http://www.bluenile.com", curl=curl) 
myPage <- getURL(myURL, curl = curl) 

library(RJSONIO) 
> names(fromJSON(myPage)) 
[1] "diamondDetailsHeader" "diamondDetailsBodies" "pageMetadata"   "expandedUrl"   
[5] "newVersion"   "multiDiamond" 

ve çerezleri:

> getCurlInfo(curl)$cookielist 
[1] ".bluenile.com\tTRUE\t/\tFALSE\t2412270275\tGUID\tDA5C11F5_E468_46B5_B4E8_D551D4D6EA4D"                  
[2] ".bluenile.com\tTRUE\t/\tFALSE\t1475342275\tsplit\tver~3&presetFilters~TEST"                    
[3] ".bluenile.com\tTRUE\t/\tFALSE\t1727630275\tsitetrack\tver~2&jse~0"                       
[4] ".bluenile.com\tTRUE\t/\tFALSE\t1425230275\tpop\tver~2&china~false&french~false&ie~false&internationalSelect~false&iphoneApp~false&survey~false&uae~false" 
[5] ".bluenile.com\tTRUE\t/\tFALSE\t1475342275\tdsearch\tver~6&newUser~true"                     
[6] ".bluenile.com\tTRUE\t/\tFALSE\t1443806275\tlocale\tver~1&country~IRL&currency~EUR&language~en-gb&productSet~BNUK"           
[7] ".bluenile.com\tTRUE\t/\tFALSE\t0\tbnses\tver~1&ace~false&isbml~false&fbcs~false&ss~0&mbpop~false&sswpu~false&deo~false"         
[8] ".bluenile.com\tTRUE\t/\tFALSE\t1727630275\tbnper\tver~5&NIB~0&DM~-&GUID~DA5C11F5_E468_46B5_B4E8_D551D4D6EA4D&SESS-CT~1&STC~32RPVK&FB_MINI~false&SUB~false" 
[9] "#HttpOnly_www.bluenile.com\tFALSE\t/\tFALSE\t0\tJSESSIONID\tB8475C3AEC08205E5AC6252C94E4B858"                
[10] ".bluenile.com\tTRUE\t/\tFALSE\t1727630278\tmigrationstatus\tver~1&redirected~false"  
+0

Muhteşem. Bir cookiejar ile çalışmayı denedim ama bu hiçbir şey dönmüyordu. Ön sayfalarını önce ziyaret etmeliydin. Zeki. Durumun böyle olduğunu nereden biliyordun? – stanekam

+3

Krom gizli modun başarısız olması, açılış sayfasına bakmamı ve orada nelerin yapılmakta olduğunu gösterdi. – jdharrison

+0

Bravo, mükemmel çalışıyor! Etkileyici problem çözme ve anlama. – Tom