记录获取参赛选手信息过程

背景介绍分析:

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 把数据写入表格。

感悟:得到数据是比较容易的,数据清理是最麻烦的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值