我在 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/