получить первые 10 результатов Google, используя googleapi - PullRequest
1 голос
/ 14 декабря 2010

Мне нужно получить первые 10 результатов Google

например:

... query = urllib.urlencode({'q' : 'example'})
... 
... url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \
... % (query)
... search_results = urllib.urlopen(url)
... json = simplejson.loads(search_results.read())
... results = json['responseData']['results']

это даст мне результаты первой страницы, но я хотел бы получить больше результатов Google, кто-нибудь знает, как это сделать?

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Я делал это в прошлом, вот полный пример (я не гуру питона, но это работает):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, getopt
import urllib
import simplejson

OPTIONS = ("m:", ["min="])

def print_usage():
    s = "usage: " + sys.argv[0] + " "
    for o in OPTIONS[0]:
        if o != ":" : s += "[-" + o + "] "
    print(s + "query_string\n")

def search(query, index, offset, min_count, quiet=False, rs=[]):
    url = "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&%s&start=%s" % (query, offset)
    result = urllib.urlopen(url)
    json = simplejson.loads(result.read())
    status = json["responseStatus"]
    if status == 200:
        results = json["responseData"]["results"]
        cursor = json["responseData"]["cursor"]
        pages = cursor["pages"]
        for r in results:
            i = results.index(r) + (index -1) * len(results) + 1
            u = r["unescapedUrl"]
            rs.append(u)
            if not quiet:
                print("%3d. %s" % (i, u))
        next_index  = None
        next_offset = None
        for p in pages:
            if p["label"] == index:
                i = pages.index(p)
                if i < len(pages) - 1:
                    next_index  = pages[i+1]["label"]
                    next_offset = pages[i+1]["start"]
                break
        if next_index != None and next_offset != None:
            if int(next_offset) < min_count:
                search(query, next_index, next_offset, min_count, quiet, rs)
    return rs

def main():
    min_count = 64
    try:
        opts, args = getopt.getopt(sys.argv[1:], *OPTIONS)
        for opt, arg in opts:
            if opt in ("-m", "--min"):
                min_count = int(arg)
        assert len(args) > 0
    except:
        print_usage()
        sys.exit(1)
    qs = " ".join(args)
    query = urllib.urlencode({"q" : qs})
    search(query, 1, "0", min_count)

if __name__ == "__main__":
    main()

Редактировать: я исправил очевидные ошибки в командной строке; Вы можете вызвать этот скрипт следующим образом:

python gsearch.py --min=5 vanessa mae

--min переключатель означает «по крайней мере 5 результатов» и является необязательным, вы получите максимально допустимое количество результатов (64), если оно не указано.

Кроме того, обработка ошибок для краткости опущена.

1 голос
/ 14 декабря 2010

Этот метод теперь упоминается Google как устарел , вы можете попробовать:

http://code.google.com/apis/customsearch/v1/overview.html

0 голосов
/ 14 декабря 2010

См. Документы http://code.google.com/apis/websearch/docs/reference.html#_intro_fonje

Вы ищете параметр запуска.

Нет параметра для получения большего количества результатов в одном ответе, но вы можете выполнить итерацию с помощью параметра start.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...