2014-10-02 24 views
5

Próbuję skrobać dane na stronach z API za pomocą funkcji getURL pakietu RCurl w R. Mój problem polega na tym, że nie mogę replikować odpowiedzi, że Pojawi się, gdy otworzę URL w przeglądarce Chrome, gdy zgłoszę żądanie z użyciem R. Zasadniczo, gdy otworzę stronę interfejsu API (adres URL poniżej) w Chrome działa dobrze, ale jeśli poproszę o to przy użyciu getURL w R (lub w trybie incognito w Chrome) Otrzymuję odpowiedź "500 Wewnętrzny błąd serwera", a nie ładny JSON, którego szukam."RCurl" [R] pakiet getURL błąd strony podczas skrobania API

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

tu jest moje (nie), wniosek w [R].

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")) 

moich badań do tej pory Najpierw spojrzał na tym wcześniejszym pytaniem na stosie i dodał w moim UserAgent do wniosku (nie udało się rozwiązać problemu, ale nadal może być konieczne): ViralHeat API issues with getURL() command in RCurl package

Następny Spojrzałem na tego pomocnego postu, który prowadzi mój uzasadnienie: R Disparity between browser and GET/getURL

moich pomysłów o rozwiązanie Nie jest to moja dziedzina wiedzy, ale domyślam się, że w żądaniu brakuje pliku cookie potrzebnego do wypełnienia wniosku (stąd dlaczego nie działa on w mojej przeglądarce w trybie incognito). I w porównaniu do żądania i odpowiedzi z udanej prośba o nieudanej żądanie:

Udane żądanie: enter image description here

Nieudany żądanie:

enter image description here

ktoś ma jakieś pomysły? Czy powinienem spróbować użyć pakietu RSelenium, który został zaproponowany przez MrFlicka w drugim poście, który napisałem.

Odpowiedz

6

To jest uprzejma strona. Chciałby wiedzieć, skąd pochodzisz, z jakiej waluty korzystasz itp., Aby zapewnić Ci lepsze wrażenia. Czyni to poprzez ustawienie wielu plików cookie na stronie docelowej. Więc naśladownictwa i przejdź do strony docelowej pierwszy uzyskanie ciasteczka potem goto strony chcemy:

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" 

i ciasteczka:

> 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

niesamowite. Próbowałem pracować z cookiejar, ale to nic nie zmieniło. Najpierw musiałeś odwiedzić ich pierwszą stronę. Sprytny. Skąd wiedziałeś, że tak było? – stanekam

+3

Fakt, że Chrome incognito zawiódł, skłonił mnie do spojrzenia na stronę docelową i na to, co zostało tam ustawione. – jdharrison

+0

Bravo, działa idealnie! Imponujące rozwiązywanie problemów i zrozumienie. – Tom