当前位置:网站首页>记录获取参赛选手信息过程
记录获取参赛选手信息过程
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 把数据写入表格。
感悟:得到数据是比较容易的,数据清理是最麻烦的
边栏推荐
- 4.1 JdbcTemplate for declarative transactions
- Can‘t connect to MySQL server on ‘localhost3306‘ (10061) 简洁明了的解决方法
- Web Basics and Exercises for C1 Certification - My Study Notes
- PHP解决字符乱码问题(多种编码转换)
- EventBus源码分析
- Gartner 权威预测未来4年网络安全的8大发展趋势
- [原创]STL容器map和unordered_map性能,创建,插入,随机访问速度对比!
- Cannot read properties of null (reading ‘insertBefore‘)
- 7.13 Day20----MYSQL
- 即时通讯网 即时通讯音视频开发
猜你喜欢
Grain Mall - Basics (Project Introduction & Project Construction)
Web Basics and Exercises for C1 Certification - My Study Notes
Linux环境下redis的下载、安装和启动(建议收藏)
程序员也应了解的Unity粒子系统
企业需要知道的5个 IAM 最佳实践
FPGA学习笔记——知识点总结
Programming hodgepodge (3)
Unity自动生成阻挡Collider的GameObject工具
嵌入式系统驱动初级【4】——字符设备驱动基础下_并发控制
字节最爱问的智力题,你会几道?
随机推荐
string类简介
力扣:63. 不同路径 II
Code Refactoring: For Unit Testing
C语言 -- 操作符详解
canal实现mysql数据同步
MySQL数据库(基础)
TensorRTx-YOLOv5工程解读(二)
MySQL数据库面试题总结(2022最新版)
MySQL日志篇,MySQL日志之binlog日志,binlog日志详解
7.16 Day22---MYSQL (Dao mode encapsulates JDBC)
Handling List
部署LVS-DR群集【实验】
MySql数据恢复方法个人总结
【JS】js给对象动态添加、设置、删除属性名和属性值
显式调用类的构造函数(而不是用赋值构造),实现一个new操作
4.2 声明式事务概念
去重的几种方式
MySQL日期函数
Linux环境下redis的下载、安装和启动(建议收藏)
力扣:62.不同路径