如何获得网页中的json数据
Posted pyming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获得网页中的json数据相关的知识,希望对你有一定的参考价值。
在python抓取图片的时候,有时候却找不到对应的网址,可能存在json中,所以如何用python解析json数据,小白看了几个论坛后自己总结一些以便加深印象。
1.requests.get(url,params) 获得请求数据
import requests def get_many_pages(keyword, page): params = []#收集不同页面的json数据 for i in range(30, 30*page, 30):#动态加载,每页30个 params.append({ \'tn\': \'resultjson_com\', \'ipn\': \'rj\', \'ct\': 201326592, \'is\': \'\', \'fp\': \'result\', \'queryWord\': keyword, \'cl\': 2, \'lm\': -1, \'ie\': \'utf-8\', \'oe\': \'utf-8\', \'adpicid\': \'\', \'st\': -1, \'z\': \'\', \'ic\': \'\', \'word\': keyword, \'s\': \'\', \'se\': \'\', \'tab\': \'\', \'width\': \'\', \'height\': \'\', \'face\': 0, \'istype\': 2, \'qc\': \'\', \'nc\': \'\' , \'fr\': \'\', \'pn\': i, \'rn\': 30, \'gsm\': \'1e\', \'1517048369666\': \'\' }) #json的Query String paramters 是动态的 json_url = \'https://image.baidu.com/search/acjson\'#json的init地址 json_datas = []#用于收集所有页面的json数据 for param in params:#分别取出每个动态的参数,是一个字典形式 res = requests.get(json_url, params = param)#获取json地址 res.encoding = \'utf-8\'#转化为utf-8格式 json_data = res.json().get(\'data\')#解析json数据成字典,通过get方法找出data中的值 json_datas.append(json_data)#把所有页的json数据取回
return json_datas def get_url(): json_datas = datalist#获取所有页的json数据 #print(json_datas) for each_data in json_datas:#解开列表嵌套 for each_dict in each_data:#解开列嵌套直到出现字典 each_url = each_dict.get(\'thumbURL\')#获取字典中的地址 print(each_url) datalist = get_many_pages(\'暴漫表情包\',3) get_url()
1. urllib.request + json 获得请求数据
# -*- coding: utf-8 -*- \'\'\' Created on Sat Jan 27 22:39:15 2018 @author: zhuxueming\'\'\' import urllib.request import json def get_many_pages(page): json_datas = [] for i in range(30,30*page,30):#这里由于网址中有多个%所以采用.format不能用%来格式化,根据json的地址发现,只有1517056200441=后面的数字变化在不同的页面中,所以单独改这一个就可以 json_url = \'http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E6%9A%B4%E6%BC%AB%E8%A1%A8%E6%83%85%E5%8C%85&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&word=%E6%9A%B4%E6%BC%AB%E8%A1%A8%E6%83%85%E5%8C%85&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=&fr=&pn={0}&rn=30&gsm=3c&1517056200441=\'.format(i) res = urllib.request.urlopen(json_url)#获得网址数据 html = res.read().decode(\'utf-8\')#读取数据并转化为utf-8 json_data = json.loads(html).get(\'data\')#用json转化为字典获取data里的数据 json_datas.append(json_data)#合并不同页面的数据 return json_datas def get_url(): json_datas = datalist#获取所有页的json数据 #print(json_datas) for each_data in json_datas:#解开列表嵌套 for each_dict in each_data:#解开列嵌套直到出现字典 each_url = each_dict.get(\'thumbURL\')#获取字典中的地址 print(each_url) datalist = get_many_pages(3) get_url()
综上两个方式都可以使用,只是第二种不能直接关键词搜索,但不同关键次需要修改json参数,所以也无妨,主要就是找到这个动态的json数据包比较困难,一般在js下货XHR下面。
以上是关于如何获得网页中的json数据的主要内容,如果未能解决你的问题,请参考以下文章