当前位置:网站首页>记录获取参赛选手信息过程
记录获取参赛选手信息过程
2022-08-04 05:26:00 【Drizzlejj】
背景介绍分析:
1.选手信息通过 Ajax 请求加载,不在 html 中,因此需要找到获取选手的接口。
2.该接口是一个 post 请求,需要携带参数发起请求。携带的参数包括了活动 id ,页数,每页加载选手数量,分组 id
3. 用户是可以点击选手的封面图跳转到选手详情页,选手详情页是选手的视频介绍。( iframe 中就是选手的视频)
4.因此要获取选手视频介绍,就需要拿到这个选手详情页的接口
5.选手详情页是一个 post 请求,携带了选手 id 和活动 id
6.heeaders 中对我们的请求头做了一些要求,比如活动id ,把必要的信息在请求的时候带上,不然会被反爬报错
开始写了:(为了保护该网站,网址等信息此处没写)
def jiandian():
headers = {
'activityid': '151882',
'cookie':'',
'User-Agent': '',
'origin': '',
'prefix': '',
'referer': ''
}
# 投票页链接
vote_url = " "
# 选手详情页地址
detail_url = ' '
# 投票页 post 请求需要携带的参数
vote_data = {
"ActivityId": 151882, "GroupId": 0, "PageIndex": 1, "PageSize": 30, "SearchKey": ""
}
# 发起请求
response = requests.post(url=vote_url,json=vote_data,headers=headers)
content = response.text
# 将获取内容转为字典
contenttodicy = json.loads(content)
# 得到选手列表
playerList = contenttodicy['Data']['List']
# 选手详情页的 headers
detail_headers = {
'activityid': '151882',
'cookie': '',
'User-Agent': ',
'prefix': '',
'referer':''
}
for player in playerList:
# 从选手字典中取出选手 id
playerId = player["Id"]
# 详情页 post 请求需要携带的参数
detail_data = {
"ActivityId": 151882, "Id": playerId
}
# 选手详情页发起请求
detail_response = requests.post(url=detail_url,json=detail_data,headers=detail_headers)
detail_content = detail_response.text
# 得到选手详情个人信息字典
detail_dict = json.loads(detail_content)
deal_player = detail_dict["Data"]
keys = ['Name','Intro','Cover','Detail']
# 取出选手名字、简介、封面、视频 保存到一个列表
# play_info = [deal_player.get(key) for key in keys]
# 取出选手名字、简介、封面、视频 保存到一个字典
play_info = dict([(key,deal_player[key]) for key in keys])
with open('player.json', 'a', encoding='utf-8') as fp:
fp.write(str(play_info)+',')
得到的结果如下:
本次没有对数据进行再次处理,例如需要在每个封面前加上地址,得到的视频需要把 iframe 给截取出来才能使用,最后使用 pandas 把数据写入表格。
感悟:得到数据是比较容易的,数据清理是最麻烦的
边栏推荐
- [原创]STL容器map和unordered_map性能,创建,插入,随机访问速度对比!
- 7.18 Day23 - the markup language
- 力扣:343. 整数拆分
- 谷粒商城-基础篇(项目简介&项目搭建)
- MySQL log articles, binlog log of MySQL log, detailed explanation of binlog log
- 代码重构:面向单元测试
- webrtc中的视频编码(一) 视频编码模块轮廓
- FFmpeg源码分析:avformat_open_input
- MySQL日志篇,MySQL日志之binlog日志,binlog日志详解
- 7.15 Day21---MySQL----Index
猜你喜欢
嵌入式系统驱动初级【4】——字符设备驱动基础下_并发控制
MySQL数据库(基础)
程序员也应了解的Unity粒子系统
FLV格式详解
webrtc中视频采集实现分析(二) 视频帧的分发
4.3 Annotation-based declarative transactions and XML-based declarative transactions
入坑软件测试的经验与建议
canal实现mysql数据同步
npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
8.03 Day34---BaseMapper query statement usage
随机推荐
再识关联容器
JNI基本使用
7. Execution of special SQL
Handling List
实现登录密码混合动态因子,且动态因子隐式
强制结束进程
Oracle备份脚本
Canal mysql data synchronization
8、自定义映射resultMap
梳理CamStyle、PTGAN、SPGAN、StarGAN
PHP实现异步执行程序
想好了吗?
EntityComponentSystemSamples学习笔记
嵌入式系统驱动初级【4】——字符设备驱动基础下_并发控制
音视频相关基础知识与FFmpeg介绍
thymeleaf中onclick事件动态传递参数问题
部署LVS-DR群集【实验】
7.16 Day22---MYSQL (Dao mode encapsulates JDBC)
MySQL数据库(基础)
sql server如何得到本条记录与上一条记录的差异,即变动值