我想用python获取谷歌搜索结果,到目前为止我有以下脚本,我从这里学到了post:
import urllib2
from bs4 import BeautifulSoup
import lxml
import sqlite3
import urllib
import json
def showSome(searchFor):
query = urllib.urlencode({'q':searchFor})
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s'%query
searchResponse = urllib.urlopen(url)
searchResults = searchResponse.read()
results = json.loads(searchResults)
data = results['responseData']
print 'Total results: %s'%data['cursor']['estimatedResultCount']
hits = data['results']
print 'Top %d hits'%len(hits)
for h in hits:
print ' ', h['url']
showSome("site:www.hitmeister.de/shops/")
它显示了4380个结果,当我使用浏览器搜索相同的查询时,它给了我大约6650个结果,我如何从谷歌中提取所有结果? 而且这也给了我前4个结果,我如何获取所有结果?
答案 0 :(得分:2)
这里的问题是谷歌估计的结果数量总是估计值,仅此而已。这些估算可能会因许多因素而异,显然包括您是通过API还是通过网络浏览器进行搜索。实际上,当您从同一系统上的不同浏览器运行相同的查询时,Google并不知道返回不同的估计值。这或许可以通过不同的服务器回答您的查询来解释,但我对此表示怀疑,并且谷歌肯定会考虑搜索上下文。
另请参阅this short piece和Google documentation on the subject。虽然该附录似乎是专为Google Search Appliance编写的,但它很好地描述了这些结果的准确性。
实际上,Google无论如何都不会为查询返回超过1,000次点击,因此无论初始估算如何,您都无法获得查询的所有结果。至少,我没有尝试从API请求超过1000个结果,但这是Web界面的行为,我认为API具有相同的限制。
答案 1 :(得分:1)
Google非常复杂,结果不是取决于许多不同的参数。
例如,如果我在google.co.uk
上搜索字词,则会得到与google.com
不同的结果。
对于不同的用户代理和Cookie,此行为也可能相同(例如,因为您在Cookie中设置了不同的语言)。
非常重要的是,结果计数不准确。这只是对谷歌搜索的估计。如果你想改变这种行为,我会尝试通过ajax注入相同的参数,你注入了正常的搜索(包括cookie等)。
最终我的反问题是:你为什么需要这个?这个计数大部分时间都不准确,因为计数器只是一个估计。更重要的是最高结果是否相同的问题。如果情况并非如此,我认为这将是一个问题。