Python番外篇:爬取CSDN作者排行榜数据

今天,又双叒叕是番外篇,我们来爬取CSDN作者排行榜上的数据。

1. 确定数据源

首先,排行榜的网页链接是https://blog.csdn.net/rank/list/total
排行榜
打开“查看网页源代码”,会看到:
源代码

里面根本没有排行榜数据,我认为,这是因为CSDN网站使用了AJAX技术,这种技术通过后台与服务器进行少量的数据交换就可以使网站实现异步更新,减少了网站重复内容的下载,也节省了网站的流量。简单来说,AJAX技术就可以直接运用Javascript代码加载或更新网页的一部分,而不是为了更新某个动态数据重新加载整个页面。

那爬虫面对它,有什么办法呢?
既然要实现实时更新,肯定要请求一个数据接口,这个接口提供实时的排行数据。
这个接口经过我的查找后,网址为:

https://blog.csdn.net/phoenix/web/blog/allRank/

也得加上两个参数:

page=0
pageSize=20

pageSize指定了获取网站排行榜前n名作者的数据(这里n=20),我们只需在请求时加上参数即可。

2. 分析数据

浏览器访问这个网址,会返回json格式的数据,如下图:
数据接口网页
可以看到,数据存储在data中的allRankListItem中:
接口分析1
我们来分析第一名的数据:
接口分析2

3.编写代码

我们使用json的loads函数,加载数据。
这里我们只打印前10的排行数据:

import requests
from json import loads

headers = {
    
    "User-Agent":
               "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
           "Host": "blog.csdn.net"
           }
params = {
    
    
    "page": "0",
    # 可以修改pageSize的值
    "pageSize": "10"
}
url = "https://blog.csdn.net/phoenix/web/blog/allRank/"
r = requests.get(url, headers=headers, params=params)

data = loads(r.text)["data"]["allRankListItem"]

for i in data:
	user_url = "https://blog.csdn.net/" + i["userName"]
    print(i["currentRank"],
          i["nickName"],
          ",粉丝数:"+str(i["fansCount"]),
          ",等级:"+str(i["level"]),
          ",个人主页:"+user_url)

user_url是用户主页链接,CSDN的主页链接格式是:https://blog.csdn.net/ + 用户名。

4.运行代码

运行以上代码,格式应该如下:

1 涛歌依旧 ,粉丝数:96704 ,等级:11 ,个人主页:https://blog.csdn.net/stpeace
2 一个处女座的程序猿 ,粉丝数:468522 ,等级:10 ,个人主页:https://blog.csdn.net/qq_41185868
3 yuanmeng001 ,粉丝数:14092 ,等级:11 ,个人主页:https://blog.csdn.net/yuanmeng001
4 yjclsx ,粉丝数:6701 ,等级:10 ,个人主页:https://blog.csdn.net/yjclsx
5 SAP剑客 ,粉丝数:9330 ,等级:10 ,个人主页:https://blog.csdn.net/zhongguomao
6 Augusdi ,粉丝数:10076 ,等级:10 ,个人主页:https://blog.csdn.net/augusdi
7 dog250 ,粉丝数:18534 ,等级:10 ,个人主页:https://blog.csdn.net/dog250
8 Inside_Zhang ,粉丝数:5976 ,等级:10 ,个人主页:https://blog.csdn.net/lanchunhui
9 OkidoGreen ,粉丝数:5442 ,等级:10 ,个人主页:https://blog.csdn.net/z69183787
10 DrogoZhang ,粉丝数:21420 ,等级:10 ,个人主页:https://blog.csdn.net/weixin_40400177

今天的番外篇就到这儿了,感兴趣记得收藏点赞哦~~

猜你喜欢

转载自blog.csdn.net/wangzirui32/article/details/113618134