我在 python 中实现了一个程序,它执行谷歌搜索并从搜索结果中捕获前十个链接。我正在使用 'pygoogle' 库进行搜索,当我在前两三次实现我的程序时,它得到了正确的点击,整个项目运行得非常好。但是后来,在下载某些链接后,它给出了如下错误。 (gui_two.py 是我的程序名)

Tkinter 回调中的异常

Traceback (most recent call last):

  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
  File "gui_two.py", line 113, in action
    result = uc.utilcorpus(self.fn1,"")
  File "/home/ci/Desktop/work/corpus/corpus.py", line 125, in utilcorpus
    for url in g1.get_urls():   #this is key sentence based search loop
  File "/home/ci/Desktop/work/corpus/pygoogle.py", line 132, in get_urls
    for result in  data['responseData']['results']:
  TypeError: 'NoneType' object has no attribute '__getitem__'

我知道这是 python 中最熟悉的错误,但我无法做任何事情,因为它是一个库。我想知道我的程序是否在向 Google 发送垃圾邮件,或者我需要自定义 Google 搜索 API,或者可能是其他原因。请给我准确的信息,以便毫无问题地执行搜索。我将非常感谢您的帮助。

谢谢。

编辑:实际上我的代码非常庞大,这里是一小段代码,出现问题。
  g1 = pygoogle(query)
  g1.pages = 1
  for url in g1.get_urls(): #error is in this line
      print "URL : ",url

如果我们简单地将它复制到一个简单的 .py 文件中它可能会起作用,但是如果我们多次执行它,程序就会出错。

最佳答案

这是来自 pygoogle.py(来自 http://pygoogle.googlecode.com/svn/trunk/pygoogle.py )的罪魁祸首代码

def get_urls(self):
    """Returns list of result URLs"""
    results = []
    search_results = self.__search__()
    if not search_results:
        self.logger.info('No results returned')
        return results
    for data in search_results:
        if data and data.has_key('responseData') and data['responseData']['results']:
            for result in  data['responseData']['results']:
                if result:
                    results.append(urllib.unquote(result['unescapedUrl']))
    return results

与使用 data['responseData']['results'] 的所有其他地方不同,它们不会都使用 has_key() 检查是否存在。

我怀疑您的 responseData 缺少 results ,因此 for 循环失败。

既然你有源,你可以自己编辑。

还为该项目提出问题 - 实际上与 this 非常相似。

关于python - Python 中的 Google 搜索问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22957678/

10-12 12:24
查看更多