我正在编写一个简单的Groovy脚本来请求Google搜索中的简单搜索,然后解析结果集。我知道有自定义搜索API - 但这对我不起作用,所以请不要指向我这个方向。
我正在使用HTTPBuilder发出请求。我发现所有其他方法“string”.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->醇#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 }
这是不可能的?谷歌是欺骗我并向我发送垃圾数据还是我需要更多地调整我的HTTPBuilder?有什么想法吗?
答案 0 :(得分:0)
你没有提到你正在使用的搜索网址,所以我不能说你为什么得到403s。以下代码使用标准Google网站进行搜索,并且在没有任何Forbidden或其他状态错误的情况下为我工作:
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.1' )
import static groovyx.net.http.Method.GET
import static groovyx.net.http.ContentType.*
def http = new groovyx.net.http.HTTPBuilder('http://www.google.com')
def queryTerms =['queen','of','hearts']
http.request(GET,HTML) { req ->
uri.path = '/search'
uri.query= [q: queryTerms.join('+'), hl: 'en']
headers.'User-Agent' = 'Mozilla/5.0'
response.success = { resp, html ->
println "Site title: ${html.HEAD.TITLE.text()}"
}
response.failure = { resp ->
println resp.statusLine
}
}
它输出网站标题,以表明它已成功解析HTML:
网站标题:女王+ +心灵 - Google搜索