Python爬取页游火线精英全区挑战排行榜

本文介绍了如何使用Python爬取页游火线精英的全区挑战排行榜数据,通过Ajax请求获取数据,解析并保存,再进行排序、绘图。文章详细展示了代码实现过程,并对比了直接保存数据列表与存储到MongoDB两种方法,最后使用pyecharts生成图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、思路:

二、抓取分析:

三、代码实现 

1.构造单个Ajax请求

2.解析url,将数据迭代保存至dict中

3.调用函数,爬取数据

4.对结果排序取前十

5.绘图

6.完整代码:

7.结果:

8.方法二:先将数据保存至MongoDB中,然后再取出

四、结语:

五、更新-使用pyecharts生成图表


 

   本人很久之前玩过这个4399的游戏(至少也上过全区榜一啊[嘚瑟]),学了Ajax请求之后试着爬了一下全区的挑战排行榜。

   运行环境(jupyter notebook)

一、思路:

   首先登陆火线精英官网,分析排行榜的Ajax请求,然后对每一个Ajax请求进行遍历并保存(暂时保存为list/存入MongoDB),最后使用plot绘出双y轴折线图。

二、抓取分析:

   登陆官网:http://news.4399.com/hxjy/index.html,下拉至荣誉排行榜的位置,鼠标右键调出检查框,选择NetWork>XHR,刷新页面发现加载出一个Ajax请求(电信一区的挑战排行榜),如下图:

   单击这个Ajax请求,可以看见,url为:http://my.4399.com/zhuanti/hxjy/ryphb-ajaxGetRank-_AJAX_-1?sid=1&aid=31,method为GET,初步来看Query参数应该是sid和aid,但是看不出参数的变化规律。另外可以看到Requests Headers的Accept,Referer,User-Agent,X-Requested-With等属性,这些在构造基本请求的时候会用到。

   然后在网页上选择“电信二区”,这时发现多了一个Ajax请求,查看新请求的url:http://my.4399.com/zhuanti/hxjy/ryphb-ajaxGetRank-_AJAX_-1?sid=2&aid=31,其中参数sid=2,aid=31;选择“电信三区”,新url的sid=3,aid=31;发现sid变化而aid没有变化,推测sid代指区服,aid代指排行榜;之后切换到联通区,同理发现,联通一区:sid=101,aid=31;联通二区:sid=102,aid=31等等。

   有了url,接下来分析Ajax中所需要爬取的数据。随便查看一个Ajax请求的Preview,发现“排名”,“昵称”,“难度/分数”都在data.list中。这样我们就可以获取所需数据了。

三、代码实现 

1.构造单个Ajax请求

import requests
from urllib.parse import urlencode
#构造请求
base_url='http://my.4399.com/zhuanti/hxjy/ryphb-ajaxGetRank-_AJAX_-1?'
headers={
    'Referer':'http://my.4399.com/zhuanti/hxjy/ryphb',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',
    'X-Requested-With':'XMLHttpRequest'
}

#获取所需信息
def get_page(sid):
    params={
        'aid':31,
        'sid':sid
    }
    url=base_url+urlencode(params)
    try:
        r=requests.get(url,headers=headers)
        r.encoding='utf-8'  #
        if r.status_code==200:
            return r.json()
    except r.ConnectionError:
        return None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值