ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

动态加载数据

2022-08-11 00:31:22  阅读:185  来源: 互联网

标签:fp url 数据 json post 动态 data page 加载


ajax请求 json数据
动态加载,不会显示在网页源码中 json是一种数据传输格式,本质上是对象
实现局部更新 对象就是本地用的,而json是作为数据传输用的
  • 将Python对象编码成JSON字符串:json.dumps(data)

  • 解码 JSON 对象: json.loads(jsonData)

  • 将序列化的str保存到文件中json.dump(obj, fp,ensure_ascii=False)

      - obj: 表示是要序列化的对象。
      - fp: 文件描述符,将序列化的str保存到文件中。json模块总是生成str对象,而不是字节对象;因	此,fp.write()必须支持str输入。
      - ensure_ascii=Flase,禁止使用ascii编码,按utf-8编码
    
  • 从文件中读取json格式字符串,转化为python对象json.load(fp)

  •  fp: 文件描述符,将fp(.read()支持包含JSON文档的文本文件或二进制文件)反序列化为Python对象。
    

药局总监

页面分析:

  1. 确定页面中企业相关数据是否为动态加载? 相关的企业信息是动态加载出来的 通过抓包工具实现全 搜索,定位动态加载数据对应的数据包!
    post:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
  2. 该请求返回的响应数据是一组json串,通过对json串的一个简单分析,没有找到企业详情页的url,但是找到个每一家企业的id
  3. 每一家企业详情页的url,域名都是一样的,只有请求参数id值不同 可以使用同一个域名结合着不同企业的id值拼接成一家完整企业详情页url
  4. 判断企业详情页中的数据是否为动态加载? 通过抓包工具检测,发现企业详情信息在详情页中为动态加载的数据
  5. 通过抓包工具实现全局搜索定位动态加载数据对应的数据包
    post-url:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
    6 请求参数:id=xxxxx 请求到的json串就是我们最终想要的企业详情信息数据
# -*- coding = utf-8 -*-
#@time :2020/5/17 18:22
#@file 药监总局.py
#@Software: PyCharm

import requests
from fake_useragent  import UserAgent
import json

'''
通过分析‘发现这个网页是一个动态加载的网页,右键源代码里面没有东西,是个ajx的动态请求,从XHR中找到post请求url
'''
if __name__ == '__main__':
    IDlist = []  # 所有企业ID
    infolist = []
    post_url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"
    print("开始".center(10, "*"))
    start_page = int(input("请输入起始页码:"))
    end_page = int(input("请输入结束页码;"))
    for page in range(start_page,end_page+1):
        print("第%s页开始-"%page)
        fromdata={
            "on":"true",
            "page":page,
            "pageSize":"15",
            "productName":"",
            "conditionType":"1",
            "applyname":"",
            "applysn":"",
        }
        r =requests.post(url=post_url,headers={"User-Agent":UserAgent().chrome},data=fromdata)
        #获取json数据
        data_json = r.json()
        #遍历,获取ID 值,将data——json响应的信息,在json在线解析中发现,是一个字典,想要的ID 在这个list里面
        for data in data_json["list"]:
            IDlist.append(data["ID"])


    #获取详情页的post URL
    homepage_post = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById"
    #遍历列表,每循环一次封装一次
    for id in IDlist:
        data ={
            "id":id,
        }
        r =requests.post(url=homepage_post,headers={"User-Agent":UserAgent().random},data=data)
        info =r.json()
        # print(info)
        infolist.append(info)
    #持久化存储
    fp =open("infodata.json","w",encoding="utf8")
    json.dump(infolist,fp=fp,ensure_ascii=False)
    print("结束".center(10,"*"))




标签:fp,url,数据,json,post,动态,data,page,加载
来源: https://www.cnblogs.com/saury/p/16574432.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有