无法解码Google API的JSON对象

0 投票
1 回答
1129 浏览
提问于 2025-04-18 04:54

我的Python脚本正在通过谷歌页面搜索特定的内容,比如网址中的路径。以下是我的代码:

import urllib2
import urllib
import json

def search(target):
        num_queries = 50 * 4
        for start in range(0, num_queries, 4):
                dork = 'intext: hacking'
                dork = urllib.urlencode({'q' : dork})
                url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % dork
                for start in range(0, num_queries, 4):
                        request_url = '{0}&start={1}'.format(url, start)
                        search_results = urllib.urlopen(request_url)
                        #try:
                        j = json.loads(search_results.read())
                        #except ValueError:
                        #print "Error: "
                                #continue
                        results = j['responseData']['results']
                        for result in results:
                                title = result['title']
                                url = result['url']
                                if target in url:
                                        print ( '[*]' + url )

def main():
        target = raw_input("Enter target >> ")
        search(target)


if __name__ ==  "__main__":
        main()

在第三个结果之后,我收到了“无法解码JSON对象”的错误。以下是完整的错误信息:

Enter target >> .com
[*]some site
[*]some site
[*]some site
Traceback (most recent call last):
  File "gs.py", line 32, in <module>
    main()
  File "gs.py", line 28, in main
    search(target)
  File "gs.py", line 15, in search
    j = json.loads(search_results.read())
  File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python2.7/json/decoder.py", line 365, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/python2.7/json/decoder.py", line 383, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

有没有人知道这个错误是从哪里来的,怎么解决呢?

1 个回答

0

你把url的值给覆盖掉了。

在结果下面:

url = result['url']

然后它又回到最开始的地方:

request_url = '{0}&start={1}'.format(url, start)

这可能是因为多了一个循环。试试这样,不要那个多余的循环:

def search(target):
        num_queries = 50 * 4
        for start in range(0, num_queries, 4):
                dork = 'intext: hacking'
                dork = urllib.urlencode({'q' : dork})
                url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' % dork
                request_url = '{0}&start={1}'.format(url, start)
                search_results = urllib.urlopen(request_url)
                #try:
                j = json.loads(search_results.read())
                #except ValueError:
                #print "Error: "
                #continue
                results = j['responseData']['results']
                for result in results:
                        title = result['title']
                        url = result['url']
                        if target in url:
                                print ( '[*]' + url )

撰写回答