使用python搜索谷歌搜索的结果
问题描述:
我想从谷歌搜索中提取前50个搜索结果并获取每个搜索结果的标题和摘录。 我正在使用以下代码。使用python搜索谷歌搜索的结果
#!/usr/bin/python3
import json
import urllib.request, urllib.parse
def showsome(searchfor):
query = urllib.parse.urlencode({'q': searchfor})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
search_response = urllib.request.urlopen(url)
search_results = search_response.read().decode("utf8")
results = json.loads(search_results)
data = results['responseData']
print('Total results: %s' % data['cursor']['estimatedResultCount'])
print(data['results'])
hits = data['results']
print('Top %d hits:' % len(hits))
print(hits)
for h in hits:
print(' ',h['title'])
print(' ', h['url'])
showsome('jaguar')
但是我只得到4个结果。即图像搜索之前的结果出现在搜索结果页面上。 有人可以请建议一个更好的方法来完成这项任务。 它会更好,如果你能给一个基因的方式,可以在其他搜索引擎也可以工作也说yahoo.com
答
如所述here,该API已被弃用。它似乎仍在运作,但我不会依赖它继续使用。你应该寻找一个替代API。
尽管如此,每个查询的默认结果数量是4.最小值是1,最大值是8,这可以使用rst
查询参数来设置,即附加&rst=8
以获得每个查询8个结果。
您需要进行其他查询才能检索更多结果。第一个结果是用start
查询参数指定的,例如, &start=4
将返回第4次以后的结果。您可以使用results['responseData']['cursor']
给你页码的映射开始偏移,e.g:
>>> pprint(results['responseData']['cursor'])
{'currentPageIndex': 0,
'estimatedResultCount': '29600000',
'moreResultsUrl': 'http://www.google.com/search?oe=utf8&ie=utf8&source=uds&start=0&hl=en&q=jaguar',
'pages': [{'label': 1, 'start': '0'},
{'label': 2, 'start': '4'},
{'label': 3, 'start': '8'},
{'label': 4, 'start': '12'},
{'label': 5, 'start': '16'},
{'label': 6, 'start': '20'},
{'label': 7, 'start': '24'},
{'label': 8, 'start': '28'}],
'resultCount': '29,600,000',
'searchResultTime': '0.19'}
详情可以在链接documentation发现,见“标准URL参数”一节。
雅虎的API会有所不同(我预计),所以这种方法将不会在那里工作。
你能推荐一些其他好的方法来做到这一点吗? – ronilp 2015-04-04 12:54:44
转到谷歌和搜索。我发现这个:https://developers.google.com/custom-search/json-api/v1/overview,但我没有使用它,所以我不能推荐它。有一些讨论[这里](http://stackoverflow.com/q/4082966/21945)。一些人推荐雅虎的API。 – mhawke 2015-04-04 13:06:14