2014-04-09 2 views
3

저는 파이썬에서 Google 검색을 수행하고 검색 결과에서 상위 10 개의 링크를 캡처하는 프로그램을 구현했습니다. 검색을 위해 'pygoogle'라이브러리를 사용하고 있는데 처음 2 ~ 3 번 프로그램을 구현할 때 적절한 히트를 얻고 전체 프로젝트가 잘 작동합니다. 그러나 이후에는 특정 링크가 다운로드 된 후 다음과 같은 오류가 발생합니다. Tkinter를 콜백Python의 Google 검색 문제

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__' 

나는이 파이썬에서 가장 친숙한 오류가 알고 있지만,이 라이브러리이기 때문에 나는 아무것도 할 수없는 생각에

예외 (gui_two.py 내 프로그램 이름입니다). 내 프로그램이 Google을 스팸하고 있거나 맞춤 Google 검색 API가 필요하거나 다른 이유 일 수 있습니다. 아무런 문제없이 검색을 수행하기위한 정확한 정보를 알려주십시오. 나는 당신의 도움에 너무 감사 할 것입니다.

감사합니다.

편집 : 실제로 내 코드가 매우 커서 여기에 문제가 발생하는 작은 코드 조각이 있습니다.

g1 = pygoogle(query) 
    g1.pages = 1 
    for url in g1.get_urls(): #error is in this line 
     print "URL : ",url 

단순한 .py 파일로 복사하면 작동하지만 여러 번 실행하면 프로그램에서 오류가 발생합니다.

+2

그것은 나에게 보인다. 무엇이 잘못되었는지를 알 수 있도록 코드를 입력 해 주실 수 있습니까? – cnluzon

+1

코드를 표시하십시오. 그렇지 않으면 우리는 추측하고 있습니다. – DNA

+0

작은 코드를 추가했습니다. 제발 좀보세요. – sairam

답변

2

여기 pygoogle.py에서 (http://pygoogle.googlecode.com/svn/trunk/pygoogle.py에서) 범인 코드 data['responseData']['results']를 사용하는 다른 모든 곳과는 달리

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 

이다, 그들은 모두가 존재 has_key() 사용에 대한 확인되지 않고있어.

responseDataresults이 누락 된 것으로 의심되어 for 루프가 실패합니다.

소스가 있으므로 직접 수정할 수 있습니다.

프로젝트에도 문제가 있습니다. this과 매우 유사합니다.

+0

네, 맞습니다. pygoogle의 소스 코드를 수정했는데 대답을 올렸습니다. 잘 작동합니다. 감사합니다 :) – sairam

0

pygoogle.py 라이브러리 프로그램의 소스 코드를 수정하여 문제를 해결했습니다. 이 코드의 버그는 요소에 데이터가 있는지 여부가 코드에서 확인되지 않은 것입니다. 수정 된 코드는 다음과 같습니다

데프 get_urls (자동) : 당신이 빈 결과를 얻을처럼

"""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 
+0

대답을 대답으로 선택하십시오. – ands