zoukankan      html  css  js  c++  java
  • 如何获得网页中的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下面。

  • 相关阅读:
    【Python】异常
    【Python】面向对象
    【Python】文件操作
    【Python】函数
    【Python】介绍以及环境搭建
    【Java】阿里巴巴开发规范手册
    【Java】NIO
    【Java】JUC
    【Git】国内的项目托管网站-码云
    【Git】在 Idea 中使用 Git
  • 原文地址:https://www.cnblogs.com/Zhu-Xueming/p/8367614.html
Copyright © 2011-2022 走看看