1

我正在使用我在 SO 上找到的一些代码来谷歌搜索一组字符串并返回“预期”数量的结果。这是该代码:

for a in months:
    for b in range(1, daysInMonth[a] + 1):

        #Code

        if not myString:
            googleStats.append(None)
        else:
            try:
            query = urllib.urlencode({'q': myString})
            url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % query
            search_response = urllib.urlopen(url)
            search_results = search_response.read()
            results = json.loads(search_results)
            data = results['responseData']           
            googleStats.append(data['cursor']['estimatedResultCount'])
        except TypeError:
            googleStats.append(None)
for x in range(0, len(googleStats)):
    if googleStats[x] != None:
        finalGoogleStats.append(googleStats[x])

有两个问题,可能是相关的。当我返回 len(finalGoogleStats) 时,每次都不同。一次是 37,然后是 12。但是,它应该更像是 240。

这是我在取出 try/except 时收到的 TypeError:

TypeError: 'NoneType' object has no attribute '__getitem__'

在线发生

googleStats.append(data['cursor']['estimatedResultCount'])

所以,我只是无法弄清楚为什么 googleStats 中的 None 数量每次都在变化,而且它从来没有像应有的那样低。如果有人有任何想法,我很想听听他们,谢谢!

更新

当我尝试为我正在搜索的每个想法打印数据时,我会得到大量的 Nones 和非常非常少的实际 JSON 字典。我得到的字典分布在所有搜索中,我没有看到什么是无和什么不是的模式。因此,这个问题看起来与 GoogleAPI 的关系比其他任何事情都多。

4

3 回答 3

1

首先,我会说删除你的try..except条款,看看问题到底出在哪里。然后作为一般的良好实践,当您尝试访问字典元素的层时,请使用.get()方法来更好地控制。

作为您可能的演示TypeError,这是我有根据的猜测:

>>> a = {}
>>> a['lol'] = None
>>> a['lol']['teemo']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'NoneType' object has no attribute '__getitem__'
>>> 

有几种使用方法.get(),做一个简单的演示:

>>> a = {}
>>> b = a.get('lol')  # will return None
>>> if type(b) is dict:  # determine type
...     print b.get('teemo')  # same technique if b is indeed of type dict
... 
>>> 
于 2013-07-18T14:46:46.380 回答
1

答案是我担心了一段时间,但感谢所有试图提供帮助的人,如果有任何有用的话,我会支持你。

所以,谷歌似乎随机吓坏了我正在搜索必须的东西。这是他们给我的错误:

Suspected Terms of Service Abuse ...... responseStatus:403

所以,我猜他们限制了我可以用他们搜索多少。但是,仍然奇怪的是,它并非一直都在发生,我仍然在错误的海洋中获得零星的成功搜索。那还是个谜……

于 2013-07-18T15:09:28.133 回答
1

默认情况下,googleapi 通过最少的结果。如果您想增加显示结果,请在您的网址中添加另一个参数“rsz=8”(默认情况下 rsz=1,因此结果很小)。

所以你的新网址变成:

url = ' http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=8&%s ' % 查询

在此处查看详细文档:https ://developers.google.com/web-search/docs/reference#_class_GSearch

于 2016-02-25T18:33:14.587 回答