使用Google API获取前10条搜索结果
我想获取谷歌搜索的前10个结果。
比如说:
... query = urllib.urlencode({'q' : 'example'})
...
... url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \
... % (query)
... search_results = urllib.urlopen(url)
... json = simplejson.loads(search_results.read())
... results = json['responseData']['results']
这个代码可以让我得到第一页的搜索结果,但我想要更多的谷歌搜索结果,有人知道怎么做吗?
2 个回答
0
查看文档 http://code.google.com/apis/websearch/docs/reference.html#_intro_fonje
你需要关注的是“start”这个参数。
没有办法一次性获取更多的结果,但你可以通过“start”这个参数来逐步获取。
3
我以前做过这个,这里有个完整的例子(我不是Python高手,但这个是可以用的):
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys, getopt
import urllib
import simplejson
OPTIONS = ("m:", ["min="])
def print_usage():
s = "usage: " + sys.argv[0] + " "
for o in OPTIONS[0]:
if o != ":" : s += "[-" + o + "] "
print(s + "query_string\n")
def search(query, index, offset, min_count, quiet=False, rs=[]):
url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&%s&start=%s" % (query, offset)
result = urllib.urlopen(url)
json = simplejson.loads(result.read())
status = json["responseStatus"]
if status == 200:
results = json["responseData"]["results"]
cursor = json["responseData"]["cursor"]
pages = cursor["pages"]
for r in results:
i = results.index(r) + (index -1) * len(results) + 1
u = r["unescapedUrl"]
rs.append(u)
if not quiet:
print("%3d. %s" % (i, u))
next_index = None
next_offset = None
for p in pages:
if p["label"] == index:
i = pages.index(p)
if i < len(pages) - 1:
next_index = pages[i+1]["label"]
next_offset = pages[i+1]["start"]
break
if next_index != None and next_offset != None:
if int(next_offset) < min_count:
search(query, next_index, next_offset, min_count, quiet, rs)
return rs
def main():
min_count = 64
try:
opts, args = getopt.getopt(sys.argv[1:], *OPTIONS)
for opt, arg in opts:
if opt in ("-m", "--min"):
min_count = int(arg)
assert len(args) > 0
except:
print_usage()
sys.exit(1)
qs = " ".join(args)
query = urllib.urlencode({"q" : qs})
search(query, 1, "0", min_count)
if __name__ == "__main__":
main()
补充:我修正了一些明显的命令行选项处理问题;你可以这样调用这个脚本:
python gsearch.py --min=5 vanessa mae
--min
这个选项的意思是“至少要5个结果”,它是可选的,如果你不指定这个选项,你将得到最多允许的结果数量(64)。
另外,为了简洁起见,错误处理部分没有包含。