无法解码Google API的JSON对象
我的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 )