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下面。

  • 相关阅读:
    deeplearning.ai 卷积神经网络 Week 1 卷积神经网络
    deeplearning.ai 构建机器学习项目 Week 2 机器学习策略 II
    deeplearning.ai 构建机器学习项目 Week 1 机器学习策略 I
    deeplearning.ai 改善深层神经网络 week3 超参数调试、Batch Normalization和程序框架
    deeplearning.ai 改善深层神经网络 week2 优化算法
    deeplearning.ai 改善深层神经网络 week1 深度学习的实用层面
    cs231n spring 2017 lecture8 Deep Learning Networks
    cs231n spring 2017 lecture7 Training Neural Networks II
    cs231n spring 2017 lecture6 Training Neural Networks I
    cs231n spring 2017 Python/Numpy基础
  • 原文地址:https://www.cnblogs.com/Zhu-Xueming/p/8367614.html
Copyright © 2011-2022 走看看