当前位置:网站首页>动态加载数据
动态加载数据
2022-07-29 05:23:00 【赵颂@】
| 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对象。
药局总监
页面分析:
- 确定页面中企业相关数据是否为动态加载? 相关的企业信息是动态加载出来的 通过抓包工具实现全 搜索,定位动态加载数据对应的数据包!
post:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList- 该请求返回的响应数据是一组json串,通过对json串的一个简单分析,没有找到企业详情页的url,但是找到个每一家企业的id
- 每一家企业详情页的url,域名都是一样的,只有请求参数id值不同 可以使用同一个域名结合着不同企业的id值拼接成一家完整企业详情页url
- 判断企业详情页中的数据是否为动态加载? 通过抓包工具检测,发现企业详情信息在详情页中为动态加载的数据
- 通过抓包工具实现全局搜索定位动态加载数据对应的数据包
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,"*"))
边栏推荐
猜你喜欢

QT学习笔记-Qt Model/View

智能货架安全监测系统

【软件工程之美 - 专栏笔记】19 | 作为程序员,你应该有产品意识

ABSA1: Attentional Encoder Network for Targeted Sentiment Classification

Jingwei Qili: development of heart rate and blood oxygen module based on hmep060 (1: FPGA sends multi bit instructions)

From entry to soul: how to use tb6600 single chip microcomputer to control stepping motor with high precision (42/57)

HAL库学习笔记-14 ADC和DAC

华为云14天鸿蒙设备开发-Day5驱动子系统开发

【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?

【软件工程之美 - 专栏笔记】14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决
随机推荐
Huawei cloud 14 days Hongmeng device development -day1 environment construction
新能源充电桩后台管理系统平台
SimpleFOC调参3-PID参数整定攻略
智能温度控制系统
QT learning notes - Import and export of Excel
基于51单片机的DAC0832波形发生器
华为云14天鸿蒙设备开发-Day1环境搭建
Pytorch's data reading mechanism
Model building in pytorch
【软件工程之美 - 专栏笔记】26 | 持续交付:如何做到随时发布新版本到生产环境?
PHY6252是一款超低功耗物联网蓝牙无线通信芯片
物联网倾斜监测解决方案
简洁代码实现pdf转word文档
多线程和并发
STM32 printf问题总结 semihosting microLIB理解
CS4344国产替代DP4344 192K 双通道 24 位 DA 转换器
扬尘噪声监控系统
【软件工程之美 - 专栏笔记】“一问一答”第3期 | 18个软件开发常见问题解决策略
Huawei cloud 14 day Hongmeng device development -day2 compilation framework
【软件工程之美 - 专栏笔记】13 | 白天开会,加班写代码的节奏怎么破?