2012-02-15 17 views
10

HedefR Bir web tarayıcısında gösterilen Google Arama web sayfasının HTML indirmek için Ar kullanmak istiyorum aynı arama URL'ye

için (web tarayıcısı ile karşılaştırıldığında) farklı HTML gösterir.

Sorun

ben web tarayıcısından aynı URL'yi kullanarak, Ar Google Arama web sayfası HTML indirmek, ben R web tarayıcısı HTML örneğin farklıdır HTML indirilen fark etmiş Gelişmiş bir Google Arama URL'si için tarih parametresinin HTML tarafından okunan HTML'de yok sayılırken, web tarayıcısında tutulur.

Örnek I "West End Tiyatrosu'nda" için web tarayıcısında bir Google Araması ve 31 Ocak 2012 için 1 Ocak bir tarih aralığı belirtmek

Sonra oluşturulan URL'yi kopyalayın ve Ar yapıştırın Ben açan ilk web sayfası ben ancak ikinci ve üçüncü web sayfalarına (zorlanan tarih parametresi ile) istediğiniz ne olduğunu.

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

müstakil kod çalıştırarak görebilirsiniz yukarıdaki hangi açık (R üzerinden indirilen olarak) tarih parametresi göz ardı edilir.

Soru

nasıl yerine ikinci/üçüncü web sayfalarının açan ilk web sayfası için HTML indirebilirim?

Sistem Bilgisi yerine Google'ın arama sayfalarında sonuçları, sadece Custom Search API kullanabilirsiniz çözmeye çalışmakla

> 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 
+0

URLDecode istekte bulunmadan önce gerekli midir? –

+0

@MattBridges Ne yazık ki evet. Örneğin, aşağıdaki kod, R: browseURL (url) içine girildiğinde, yukarıdaki kodu temel alarak farklı web sayfaları üretir; browseURL (u) –

+1

Google'ın sonuçları filtrelemeyi sağlayan seçeneklerle yeniden yüklemek için Google'ın AJAX kullandığını düşünüyorum. "readLines" ve "getURL", herhangi bir AJAX çağrısının sonuçlarından önce sayfayı alır. – jbaums

cevap

2

. Bir API anahtarı aldıktan sonra, arama kriterlerinizi URL yoluyla belirtebilir ve HTML kodunu çözmek yerine bir JSON dosyası alabilirsiniz. rjson paketi JSON dosyasını bir R nesnesine okumanıza ve ilgili verileri ayıklamanıza yardımcı olur.

Bir 1000 ile sınırlı olacak bir gün sorgular, ancak çok çalışmak daha kolay olabilir.

DÜZENLEME: Özellikle, Özel Arama API'sı kullanımdan kaldırılmıştır.

+0

Bu teoride iyi bir sıkıntı ve içine baktığım bir şey. Ancak, daha önce Google Özel Arama API'mdaki temel sorun, google'dan döndürülen sonuçlarla tutarlı olmamasıdır.biraz rahatsız edici olan com. Google'dan alıntı yapmak için "sonuçlarınız Google Web Arama tarafından döndürülen sonuçlarla eşleşmiyor" - referans: http://www.google.com/support/customsearch/bin/answer.py?hl=tr&answer=141877 –

+0

Kulağa hoş geliyor bağlantı özellikle belirli sayfaları arama hakkında konuşuyor, tüm web’de arama yapmak için kullanımdan kaldırılmış [Web Arama API'sı] ’nı (https://developers.google.com/web-search/) deneyin. – blahdiblah

+0

Bu API ile çalışmak ilginç bir fikir, ancak amortismana tabi durumu göz önüne alındığında, buna zaman ayırmak konusunda tereddütlü olurdum. Burada daha sağlam bir uzun zamanlayıcı çözümü gereklidir (bu konuda bir tuğla duvara çarpmış olsam da, eğer umut verici görünüyorsa omegahat.com'daki R spidermonkey ve RFirefox paketlerini anlamakta zorlanıyorum.). –

2

Sorununuzun bir kısmı Google has profiled you ve önceki aramalarınızdan, gmail tartışmalarından, google harita kullanımından, IP adresinden, konum verilerinden, görüntülenen reklamlardan, sosyal bağlantılardan ve diğer hizmetlerden bildiklerine göre eşleşiyor. Bazıları google hesabınız olmasa bile olur.

Oturum açıkken kişiselleştirme: Web Geçmişi olan bir Google Hesabında oturum açtığınızda, Google, ziyaret ettiğiniz ne aramalara ve hangi siteleri dayalı olarak arama deneyimini kişiselleştiren geçmiş.

Oturum kapalıyken kişiselleştirme: Oturum açık değilken , Google tarayıcı, bir çerez kullanarak bağlantılı eski arama bilgilere dayanarak arama deneyiminizi özelleştirir. Google, tarayıcınızın çerezine bağlı, sorguları da içeren etkinliğine kadar 180 güne kadar oturum dışı arama gerçekleştirir ve tıkladığınız sonuçlarına ulaşır.

Lütfen otomatik sonuçlarını yapmak için tek yolu manuel bir deneyin ve profiline uygun etmektir maç. En azından tarayıcınız ve aynı çerezler ile aynı Kullanıcı-Aracı dizesini göndermeyi denemelisiniz. Bunların ağdaki HTTP isteklerinizi koklayarak veya Live HTTP Üstbilgileri gibi bir tarayıcı eklentisi kullanarak neler olduğunu öğrenebilirsiniz.

Tarihin filtrelenmesiyle ilgili olarak, jbaums yorumunun bunu içerdiğini düşünüyorum. İstemci tarafında filtrelemeyi ve sonuç-siz-tipini işleyen bazı şeyler var. Eğer AJAX şeyler eklenmiş önce googles eski arayüzü tetikleyebilir, ancak bunun etrafında bir yolu olabilir. Javascript'i devre dışı bırakırsanız, tarayıcınızda Google'dan neler aldığınızı görün.

İlgili konular