2014-01-02 4 views
1

Я хотел бы получить URL из WebSearch Google следующим образом:скрип URL из поиска Google с помощью г HTTR

library(httr) 
search.term="httr+package+daterange:%3A2456294-2456659" 
url.name=paste0("https://www.google.com/search?q=",search.term) 
url.get=GET(url.name) 
url.content=content(url.get) 

Тогда попытка получить ссылки из результата не удается:

links <- xpathApply(url.content, "//h3//a[@href]", function(x) xmlAttrs(x)[[1]]) 
Error in UseMethod("xpathApply") : 
no applicable method for 'xpathApply' applied to an object of class "XMLDocumentContent" 

Каков наилучший способ получения ссылок из url.content?

ответ

4

Попробуйте content() с as="text", чтобы предотвратить его возвращение объекта класса XMLDocumentContent:

library(httr) 
search.term="httr+package+daterange:%3A2456294-2456659" 
url.name=paste0("https://www.google.com/search?q=",search.term) 
url.get=GET(url.name) 
url.content=content(url.get, as="text") 
links <- xpathSApply(htmlParse(url.content), "//a/@href") 
head(links,3) 
# href 
# "https://www.google.com/webhp?tab=ww" 
# href 
# "https://www.google.com/search?q=httr%2Bpackage%2Bdaterange::2456294-2456659&um=1&ie=UTF-8&hl=en&tbm=isch&source=og&sa=N&tab=wi" 
# href 
# "https://maps.google.com/maps?q=httr%2Bpackage%2Bdaterange::2456294-2456659&um=1&ie=UTF-8&hl=en&sa=N&tab=wl" 

Update:

Джейк отмечает в комментарии, это также работает:

url.get=GET(url.name) 
links <- xpathSApply(htmlParse(url.get), "//a/@href") 
+0

вы также можете 'htmlParse (url.get)' и пропустить 'content' вообще –

+0

true , @JakeBurkhead. :) – lukeA

+1

Вы должны иметь возможность сделать xpathSApply (content (url.get), "// a/@ href") '. Обычно я также добавляю 'stop_for_status (url.get)', поэтому вы сразу же знаете, если HTTP-запрос завершился неудачно (в отличие от сбоя синтаксического анализа html) – hadley

 Смежные вопросы

  • Нет связанных вопросов^_^