Python中的Google搜索问题

2024-09-28 23:00:29 发布

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

我用python实现了一个程序,它执行Google搜索并从搜索结果中捕获前十个链接。我正在使用“pygoogle”库进行搜索,当我实现我的程序的前两三次时,它得到了适当的点击,整个项目运行得非常好。但是之后,在某些链接被下载之后,它会给出如下错误。(图形用户界面_二.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中最常见的错误,但我无能为力,因为它是一个库。我想知道我的程序是垃圾邮件谷歌或我需要自定义谷歌搜索API的或可能是其他原因。请给我准确的信息执行搜索没有任何问题。我将非常感激你的帮助。在

谢谢。在

编辑:实际上我的代码非常庞大,这里有一小段代码,在那里出现问题。在

^{pr2}$

若我们简单地将它复制到一个简单的.py文件中,它可能会工作,但若我们多次执行它,程序会给出一个错误。在


Tags: inpyself程序链接tkinterlib错误
2条回答

我通过修改pygoogle.py图书馆程序。此代码中的错误是,在代码中不检查元素是否有数据。修改后的代码为:

def get_url(self):

    """Returns list of result URLs"""
    results = []
    for data in self.__search__():
        #following two lines are added to fix the issue
        if data['responseData'] == None or data['responseData']['results'] == None:
            break
        for result in  data['responseData']['results']:
            if result:
                results.append(urllib.unquote(result['unescapedUrl']))
    return results

这是来自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一个。在

相关问题 更多 >