使用python的Google搜索偶尔不准确,并且存在类型错误

2024-06-16 11:42:58 发布

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

我使用我在这里找到的一些代码,以便谷歌搜索一组字符串并返回“预期”的结果量。这是密码:

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时收到的TypeError/除了:

^{2}$

在网上发生的

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

所以,我就是不明白为什么googleStats中的none的数量每次都在变化,而且从来没有像它应该的那么低。如果有人有什么想法,我很乐意听听,谢谢!在

更新

当我试图打印出我搜索的每个think的数据时,我得到了大量的none,而实际的JSON字典却很少。我得到的字典分布在所有的搜索中,我看不到什么是“无”和“非”的模式,所以,问题似乎更多的是与GoogleAPI有关。在


Tags: innoneurlforsearchdataifrange
3条回答

答案是我曾经担心过的,但多亏了所有帮助过我的人,如果有什么有用的话,我会投票给你。在

所以,Google似乎随机地觉得我在搜索一些必须的东西。他们给我的错误是:

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

所以,我想他们限制了我可以用他们搜索的范围。但是,仍然奇怪的是,它并不是一直发生的,我仍然在错误的海洋中偶尔成功地进行搜索。这仍然是个谜。。。在

默认情况下,googleapi传递的结果最少。如果要增加显示结果,请在url中添加另一个参数“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

首先,我想说删除您的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(),用于简单的演示:

^{pr2}$

相关问题 更多 >