码迷,mamicode.com
首页 > Web开发 > 详细

如何获得网页中的json数据

时间:2018-01-28 00:09:14      阅读:951      评论:0      收藏:0      [点我收藏+]

标签:min   嵌套   总结   使用   gpo   arch   odi   inf   通过   

在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数据

标签:min   嵌套   总结   使用   gpo   arch   odi   inf   通过   

原文地址:https://www.cnblogs.com/Zhu-Xueming/p/8367614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!