Почему запросы Google API через simplejson возвращают responseData: null?

Я пытаюсь сделать скриншот первого результата поиска Google с помощью Python и simplejson, но не могу получить доступ к результатам поиска, как это демонстрируют многие онлайн-примеры. Вот фрагмент:

url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % (query)
search_results = urllib.urlopen(url)
json = simplejson.load(search_results)
try:
    results = json['responseData']['results'] # always fails at this line
    first_result = results[0]
except:
    print "attempt to set results failed"

Когда я перехожу к http://ajax.googleapis.com/ajax/services/search/web?v=1.0&stackoverflow (или что-либо другое, заменяющее %s) в браузере, он отображает строку "{"responseData": null, "responseDetails": "подметание клипа", "Статус ответа": 204}." Есть ли другой способ получить доступ к результатам поиска Google в Python, помимо попытки использовать явно пустые данные ответа?


person user374372    schedule 23.06.2010    source источник


Ответы (1)


Вы пропустили &q=. Вам также следует рассмотреть возможность использования API-ключа. http://code.google.com/intl/de/apis/ajaxsearch/documentation/. Помимо того, что простое связывание строк не будет работать, вам нужно экранировать параметр.

 url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q= ' + urllib.quote_plus(query)
person evilpie    schedule 23.06.2010
comment
Большое спасибо, злодей! Но после того, как я добавил &q=, я все еще получаю нулевое значение для responseData. Изменит ли это использование ключа API? Если нет, то знаете, что было бы? Я должен был уточнить, что я установил запрос, равный urllib.urlencode({'q' : 'site:linkedin.com %s' % (company)}), но не включил его во фрагмент. - person user374372; 23.06.2010