我寫一個簡單的Groovy腳本請求從谷歌搜索簡單搜索,然後分析結果集。我知道有自定義搜索API - 但這對我不起作用,所以請不要指出我的方向。Groovy的刮谷歌搜索使用HttpBuilder - 結果似乎並不解析爲HTML或XML
我使用HTTPBuilder發出請求。我發現所有的其他方法「串」 .toURL(),HTMLCleaner ......所有的人都得到一個HTTP 403代碼,如果你與他們通話。我假設這是因爲請求標題對Google無效。
我可以得到HTTP Builder創建並得到一個非403請求。也就是說,當我在「html」上執行println(請參閱下面的代碼片段)時,它看起來不像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的「體#gsr-> DIV#main-> div-> DIV#CNT-> DIV#rcnt-> DIV#center_col-> DIV#res.med-> DIV #搜索 - > DIV#IRES-> OL#rso->
代碼:
def mainDiv = html.body.div.findAll {[email protected]() == 'main'}
println mainDiv
def rcntDiv = mainDiv.div.div.div.findAll { [email protected]() == 'rcnt' }
println rcntDiv
def searchDiv = rcntDiv.div.findAll { [email protected] == "center_col" }.div.div.findAll { [email protected] == "search" }
println searchDiv
searchDiv.div.ol.li.each { println it }
所以這是不可能的?谷歌是否欺騙我,並向我發送垃圾數據,還是我需要調整我的HTTPBuilder更多?有任何想法嗎?