GoalR lãm HTML khác nhau (khi so sánh với trình duyệt web) cho cùng một URL Google Search
Tôi muốn sử dụng R để tải về HTML của trang web Google Search như trong một trình duyệt web.
Vấn đề
Khi tôi tải về HTML Tìm kiếm trang web của Google trong R, sử dụng URL chính xác tương tự từ các trình duyệt web, tôi đã nhận thấy rằng R tải về HTML là khác nhau đối với trình duyệt web HTML ví dụ đối với URL tìm kiếm nâng cao của Google, tham số ngày bị bỏ qua trong HTML được đọc bởi R trong khi trong trình duyệt web được giữ lại.
Ví dụ
tôi làm tìm kiếm trên Google trong trình duyệt web của tôi cho "Tây hát End" và chỉ định một phạm vi ngày 1 Tháng một - 31 Tháng một 2012. Sau đó tôi sao chép URL được tạo ra và dán nó vào R
# Google Search URL from Firefox web browser
url <- "http://www.google.co.uk/search?q=west+end+theatre&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB:official&client=firefox-a#q=west+end+theatre&hl=en&client=firefox-a&hs=z7I&rls=org.mozilla:en-GB%3Aofficial&prmd=imvns&sa=X&ei=rJE7T8fwM82WhQe_6eD2CQ&ved=0CGoQpwUoBw&source=lnt&tbs=cdr:1%2Ccd_min%3A1%2F1%2F2012%2Ccd_max%3A31%2F1%2F2012&tbm=&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=6f92152f78004c6d&biw=1600&bih=810"
u <- URLdecode(url)
# Webpage as seen in browser
browseURL(u)
# Webpage as seen from R
HTML <- paste(readLines(u), collapse = "\n")
cat(HTML, file = "output01.html")
shell.exec("output01.html")
# Webpage as seen from R through RCurl
library(RCurl)
cookie = 'cookiefile.txt'
curl = getCurlHandle(cookiefile = cookie,
useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en - US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6",
header = FALSE,
verbose = TRUE,
netrc = TRUE,
maxredirs = as.integer(20),
followlocation = TRUE,
ssl.verifypeer = TRUE,
cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))
HTML2 <- getURL(u, curl = curl)
cat(HTML2, file = "output02.html")
shell.exec("output02.html")
bằng cách chạy mã khép kín. trên, chúng tôi có thể thấy rằng trang web đầu tiên mở ra là những gì tôi muốn (với tham số ngày có hiệu lực) nhưng các trang web thứ hai và thứ ba mà mở (như tải về thông qua R) có tham số ngày bị bỏ qua.
Câu hỏi
Làm thế nào tôi có thể tải về mã HTML cho trang web đầu tiên mở ra thay vì các trang web thứ ba/thứ hai?
Hệ thống thông tin
> sessionInfo()
R version 2.14.0 (2011-10-31)
Platform: x86_64-pc-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252 LC_CTYPE=English_United Kingdom.1252 LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RCurl_1.6-10.1 bitops_1.0-4.1
loaded via a namespace (and not attached):
[1] tools_2.14.0
URLDecode trước khi thực hiện yêu cầu có cần thiết không? –
@MattBridges Thật không may là có. Ví dụ: sau đây sản xuất các trang web khác nhau, dựa trên mã ở trên, khi được nhập vào R: browseURL (url); browseURL (u) –
Tôi tin rằng Google sử dụng AJAX để tải lại kết quả với các tùy chọn lọc được bật. 'readLines' và' getURL' lấy trang trước kết quả của bất kỳ cuộc gọi AJAX nào. – jbaums