декодировать результат от Google в Python - PullRequest
0 голосов
/ 17 декабря 2011

Я пытался сделать программу для получения URL от Google

но проблема в том, что я получил закодированные URL-адреса! как это !

`[u'http://www.motorrad-live.de/test.php%3Fid%3D11', u'http://www.autogaleria.pl/
auto_test/test.php%3Fid%3D37', u'http://oculus.ru/test.php%3Fid%3D2', u'http://o
culus.ru/test.php%3Fid%3D1', u'http://www.kerrytaylorauctions.com/detail-test.ph
p%3Fid%3D3432', u'http://radio.ghanaweb.com/live-radio.test.php?id=3D4', u'http:
//www.studygerman.ru/test/test.php%3Fid%3D261', u'http://www.mhealth.ru/tests/te
st.php%3Fid%3D300']

как вы видите после .php, там что-то закодировано!

вот мой код, даже если часть моего кода для декодирования !!

import json
import urllib


def print_results(results):
    mylist=[]
    n=[]
    for r in results:
        mylist.append(r['url'])
    for each in mylist:
         n.append(each.replace(u"%3FID%","?id="))
    print n


def query(qs):
    f = urllib.urlopen('http://ajax.googleapis.com/ajax/services/search/web?v=1.0&gl=de&q=%s&rsz=8&start=7'%qs)
    s = f.read()
    j = json.loads(s)

    return j['responseData']['results']
a=query('inurl:"test.php?id"')
print_results(a)

Ответы [ 2 ]

3 голосов
/ 17 декабря 2011

вы ищете функцию без кавычек:

urllib.unquote(url)
0 голосов
/ 17 декабря 2011

сначала вам нужно процитировать строку запроса перед интерполяцией:

>>> urllib.quote("inurl:\"test.php?id\"")
'inurl%3A%22test.php%3Fid%22'

>>> "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&gl=de&q=%(q)s&rsz=8&start=0" % dict(q=urllib.quote("inurl:\"test.php?id\""))
'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&gl=de&q=inurl%3A%22test.php%3Fid%22&rsz=8&start=0'

секунду я посмотрел на возвращенный json и увидел, что незашифрованный URL-адрес хранится под ключом unescapedUrl, поэтому вы можете заменить print_results(results) на:

def print_results(results):
    L=list(r['unescapedUrl'] for r in results)
    print L

, если вам действительно нужно прочитать его с клавиши url, используйте:

def print_results(results):
    L=list(urllib.unquote(r['url']) for r in results)
    print L
...