Python中的Google搜索问题
我用python实现了一个程序,它执行Google搜索并从搜索结果中捕获前十个链接。我正在使用“pygoogle”库进行搜索,当我在前两三次实现我的程序时,它得到了正确的点击率,整个项目运行得非常好。但之后,在某些链接被下载后,它给出了一个错误,如下所示。(gui_two.py是我的程序名) Tkinter回调中的异常Python中的Google搜索问题,python,google-maps,Python,Google Maps,我用python实现了一个程序,它执行Google搜索并从搜索结果中捕获前十个链接。我正在使用“pygoogle”库进行搜索,当我在前两三次实现我的程序时,它得到了正确的点击率,整个项目运行得非常好。但之后,在某些链接被下载后,它给出了一个错误,如下所示。(gui_two.py是我的程序名) Tkinter回调中的异常 Traceback (most recent call last): File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1
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的或可能是其他原因。请给我准确的信息执行搜索没有任何问题。我将非常感谢你的帮助
谢谢
编辑:其实我的代码非常庞大,这里有一小段代码,问题就出现在这里
g1 = pygoogle(query)
g1.pages = 1
for url in g1.get_urls(): #error is in this line
print "URL : ",url
如果我们只是将它复制到一个简单的.py文件中,它可能会工作,但如果我们多次执行它,程序就会出错。这是pygoogle.py(from)中的罪魁祸首代码 与使用
数据['responseData']['results']
的所有其他地方不同,使用has_key()
检查它们是否存在
我怀疑您的响应数据
缺少结果
,因此for循环失败
因为您有源代码,所以您可以自己编辑它
还为该项目制造了一个问题-与事实上的问题非常相似。我通过修改pygoogle.py库程序的源代码解决了这个问题。此代码中的错误是,代码中未检查元素是否包含数据。修改后的代码为: def get_URL(自):
在我看来,你得到的结果是空的。你能把代码放在那里,这样我们就可以看到什么可能是错误的吗?给我们看代码,否则我们只是猜测。我添加了一个小代码,请看一下。是的,你是对的,我修改了pygoogle的源代码,我发布了答案。它工作得很好。谢谢:)
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
"""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