2014-10-02 17 views
5

Tôi đang cố gắng để xóa dữ liệu trên các trang từ API bằng cách sử dụng hàm getURL của gói RCurl trong R. Vấn đề của tôi là tôi không thể sao chép phản hồi Tôi nhận được khi tôi mở URL trong Chrome khi tôi thực hiện yêu cầu bằng R. Về cơ bản, khi tôi mở trang API (url bên dưới) trong Chrome, nó hoạt động tốt nhưng nếu tôi yêu cầu bằng cách sử dụng getURL trong R (hoặc sử dụng chế độ ẩn danh trong Chrome) Tôi nhận được phản hồi '500 Lỗi Máy chủ Nội bộ' và không phải là JSON đẹp mà tôi đang tìm kiếm.'RCurl' [R] gói lỗi trang web getURL khi cạo API

URL/API trong câu hỏi: http://www.bluenile.com/api/public/loose-diamond/diamond-details/panel?country=USA&currency=USD&language=en-us&productSet=BN&sku=LD04077082

Sau đây là tôi (thất bại) yêu cầu trong [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")) 

Nghiên cứu của tôi cho đến nay Trước tiên tôi nhìn câu hỏi trước đây trên stack và thêm vào useragent tôi để yêu cầu (không giải quyết vấn đề nhưng vẫn có thể cần thiết): ViralHeat API issues with getURL() command in RCurl package

Tiếp theo tôi nhìn bài hữu ích này mà dẫn lý do của tôi: R Disparity between browser and GET/getURL

Ý tưởng của tôi về các giải pháp Đây không phải là lĩnh vực chuyên môn của tôi nhưng tôi đoán là yêu cầu thiếu cookie cần thiết để hoàn thành yêu cầu (vì vậy tại sao nó không hoạt động trong trình duyệt của tôi ở chế độ ẩn danh). Tôi đã so sánh các yêu cầu và phản hồi từ yêu cầu thành công để yêu cầu không thành công:

thành công yêu cầu: enter image description here

yêu cầu không thành công:

enter image description here

Bất cứ ai có bất cứ ý tưởng? Tôi có nên thử sử dụng gói RSelenium gói đã được đề xuất bởi MrFlick trong bài đăng thứ hai tôi đã thực hiện.

Trả lời

6

Đây là một trang web lịch sự. Nó muốn biết nơi bạn đến từ những loại tiền tệ bạn sử dụng vv để cung cấp cho bạn một trải nghiệm người dùng tốt hơn. Nó thực hiện điều này bằng cách thiết lập vô số cookie trên trang đích. Vì vậy, chúng tôi làm theo phù hợp và điều hướng đến các trang đích đầu tiên nhận được các tập tin cookie sau đó chúng tôi goto trang chúng ta muốn:

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" 

và cookie:

> 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

ảnh vui nhộn. Tôi đã cố gắng làm việc với một cookiejar nhưng điều đó đã không biến bất cứ điều gì lên. Trước tiên, bạn phải truy cập trang đầu tiên của họ. Tài giỏi. Làm thế nào bạn biết đây là trường hợp? – stanekam

+3

Thực tế là chrome incognito đã không dẫn tôi đến xem trang đích và những gì đã được thiết lập ở đó. – jdharrison

+0

Bravo, hoạt động hoàn hảo! Giải thích vấn đề và hiểu biết ấn tượng. – Tom

Các vấn đề liên quan