当前位置:网站首页>记录获取参赛选手信息过程
记录获取参赛选手信息过程
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 把数据写入表格。
感悟:得到数据是比较容易的,数据清理是最麻烦的
边栏推荐
猜你喜欢
随机推荐
sql server如何得到本条记录与上一条记录的差异,即变动值
4.1 声明式事务之JdbcTemplate
5个开源组件管理小技巧
Typora 使用保姆级教程 | 看这一篇就够了 | 历史版本已被禁用
LCP 17. Quick Calculation Robot
如何低成本修bug?测试左移给你答案
将自定义类型作为关联容器的key
再识关联容器
LCP 17. 速算机器人
如何将 DevSecOps 引入企业?
4.1 JdbcTemplate for declarative transactions
JS代码预编译
Unity开发类似Profile那样的数据分析工具
npm报错Beginning October 4, 2021, all connections to the npm registry - including for package installa
MySql data recovery method personal summary
canal实现mysql数据同步
手把手教你实现buffer(二)——内存管理及移动语义
【Matlab仿真】:一带电量为q的电荷以速度v运动,求运动电荷产生磁感应强度
力扣:96.不同的二叉搜索树
Unity DOTS学习教程汇总









