抓取谷歌可检索结果数不匹配

2024-09-29 19:28:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用python获得google搜索结果,到目前为止,我有以下脚本,这是我从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个结果,我怎么能得到所有的结果?在


Tags: importjsonurldatagoogleajaxurllibquery
2条回答

这里的问题是,谷歌估计的结果数总是估计数,没有更多。这些估计可能会因许多因素而有所不同,显然包括您是通过API还是从web浏览器进行搜索。事实上,当你在同一个系统上从不同的浏览器上运行同一个查询时,Google会返回不同的估计值。这也许可以用另一个服务器来回答你的查询来解释,但我对此表示怀疑,而且众所周知,Google会将搜索上下文考虑在内。在

另请参见this short pieceGoogle documentation on the subject。虽然这个附录似乎是专门为Google搜索设备编写的,但它很好地描述了这些结果计数的准确性。在

实际上,Google永远不会为一个查询返回超过1000次的点击量,所以无论最初的估计值如何,你永远都不会得到一个查询的所有结果。至少,我没有尝试从API请求超过1000个结果,但这是web界面的行为,我假设API也有同样的限制。在

Google非常复杂,结果并不依赖于许多不同的参数。在

例如,如果我在google.co.uk上搜索一个词,得到的结果与google.com不同。在

对于不同的用户代理和cookie,此行为也可能相同(例如,因为您在cookie中设置了不同的语言)。在

很重要的是,结果计数不准确。这只是对谷歌搜索的估计。如果您想改变这种行为,我会尝试通过ajax注入与普通搜索(包括cookie等)相同的参数。在

最后我的反问是:你为什么需要这个?这个计数在大多数情况下并不准确,因为计数器只是一个估计值。更重要的是问题是,结果是否相同。如果不是这样的话,我想那是个问题。在

相关问题 更多 >

    热门问题