Я пишу простой скрипт на Groovy, чтобы запрашивать простой поиск в Поиске Google, а затем анализировать набор результатов.Я знаю, что есть API пользовательского поиска, но он не будет работать для меня, поэтому, пожалуйста, не указывайте мне в этом направлении.
Я использую HTTPBuilder для выполнения запроса.Я обнаружил, что все другие методы "string" .toURL (), HTMLCleaner ... все они получают код http 403, если вы делаете вызов с ними.Я предполагаю, что это потому, что заголовок запроса недействителен для Google.
Я могу заставить HTTP Builder сделать и получить запрос не 403.Тем не менее, когда я делаю println на «html» (см. Фрагмент кода ниже), он не выглядит как html или xml.Это выглядит как текст.
Вот фрагмент HTTPBuilder для получения ответа:
//build query
def query = ""
queryTerms.eachWithIndex({term , i -> (i > 0) ? (query += "+" + term) : (query += term)})
def http = new HTTPBuilder(baseUrl)
http.request(Method.GET,ContentType.TEXT) { req ->
headers.'User-Agent' = 'Mozilla/5.0' }
def html = http.get(path : searchPath, contentType : ContentType.HTML, query : [q:query])
// println html
assert html instanceof groovy.util.slurpersupport.GPathResult
assert html.HEAD.size() == 1
assert html.BODY.size() == 1
Я получаю некоторый результат, поэтому я пытаюсь проанализировать его, как показано ниже.Сначала я приведу реальную структуру, а затем разбираю.Тем не менее, ничего не отображается ни в одном из проанализированных элементов.
Фактическая структура:
html-> body # gsr-> div # main-> div-> div # cnt-> div# rcnt-> div # center_col-> div # res.med-> div # search-> div # ires-> ol # rso ->
Код:
def mainDiv = html.body.div.findAll {it.@id.text() == 'main'}
println mainDiv
def rcntDiv = mainDiv.div.div.div.findAll { it.@id.text() == 'rcnt' }
println rcntDiv
def searchDiv = rcntDiv.div.findAll { it.@id.text == "center_col" }.div.div.findAll { it.@id.text == "search" }
println searchDiv
searchDiv.div.ol.li.each { println it }
Так жеэто просто невозможно?Google подделывает меня и отправляет мне ненужные данные или мне нужно еще немного настроить мой HTTPBuilder?Есть идеи?