当前位置:网站首页>动态加载数据
动态加载数据
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,"*"))
边栏推荐
- 【软件工程之美 - 专栏笔记】25 | 有哪些方法可以提高开发效率?
- Huawei cloud 14 days Hongmeng device development -day1 environment construction
- HAL库学习笔记-11 I2C
- Migration learning robot visual domain adaptation with low rank reconstruction
- 抽象封装继承多态
- STM32FF030 替代国产单片机——DP32G030
- QT learning notes QT model/view
- Reading papers on false news detection (5): a semi supervised learning method for fake news detection in social media
- 防爆倾角传感器应用于LNG液化天然气安全作业
- Hal library learning notes - 8 use of serial communication
猜你喜欢
STM32 MDK(Keil5) Contents mismatch错误总结
【软件工程之美 - 专栏笔记】14 | 项目管理工具:一切管理问题,都应思考能否通过工具解决
STM32FF030 替代国产单片机——DP32G030
shell工具finalShell
STM8S003国产替代 DP32G003 32 位微控制器芯片
Fasttext learning - text classification
一些工具,插件,软件链接分享给大家~
基于51单片机ADC0808的proteus仿真
Based on STM32: couple interactive doll (design scheme + source code +3d drawing +ad circuit)
Hal library learning notes-12 SPI
随机推荐
JUC集合类不安全
SimpleFOC调参1-力矩控制
Fasttext learning - text classification
Huawei cloud 14 day Hongmeng device development -day7wifi function development
HAL库学习笔记-12 SPI
FPGA based: multi-target motion detection (hand-in-hand teaching ①)
【软件工程之美 - 专栏笔记】19 | 作为程序员,你应该有产品意识
【软件工程之美 - 专栏笔记】16 | 怎样才能写好项目文档?
Design and implementation of QT learning notes data management system
Tf.get in tensorflow_ Detailed explanation of variable() function
Hal library learning notes-11 I2C
SimpleFOC调参3-PID参数整定攻略
扬尘噪声监控系统
HAL库学习笔记-11 I2C
Hal library learning notes - 9 DMA
【软件工程之美 - 专栏笔记】21 | 架构设计:普通程序员也能实现复杂系统?
QT learning notes QtSql
八大排序-----------快速排序
PHY6252是一款超低功耗物联网蓝牙无线通信芯片
低成本2.4GHz 无线收发芯片--Ci24R1