利用Python查询B站指定用户的粉丝信息,源码+#绿色注释(新手向,粘贴即用) 您所在的位置:网站首页 第一站网站地址 利用Python查询B站指定用户的粉丝信息,源码+#绿色注释(新手向,粘贴即用)

利用Python查询B站指定用户的粉丝信息,源码+#绿色注释(新手向,粘贴即用)

2023-04-15 19:53| 来源: 网络整理| 查看: 265

写在前面:

① 先提供如下网址:

https://api.bilibili.com/x/relation/followers?vmid=UID&pn=页数

https://api.bilibili.com/x/relation/stat?vmid=UID&jsonp=jsonp

第一个网站查粉丝信息,第二个网址查粉丝数量(有几个)。

② 对于某位指定用户,我们需要知道ta的UID,查询UID的方式是进入ta的主页,在主页网址中的“space.bilibili.com”后面那一串数字就是我们需要的UID。

③ 页数的可行范围为1,2,3,4,5,每页提供50个粉丝的数据。超过这个范围,网页弹出:{"code":22007,"message":"限制只访问前5页","ttl":1},这不在本文讨论范围,本文只提供前250个粉丝数据。

④ 对于粉丝数≤250的用户,利用以下代码可以查到所有粉丝的信息,否则只能查看前250位粉丝的信息,粉丝信息包括昵称、头像、个性签名等(抓取的关键字不同),本文提供的代码仅爬取了粉丝昵称作为示例。

⑤ 运行环境为 jupyter notebook(Anaconda3), windows11, Edge 浏览器。

#代码部分:

import requests   #导入request库来下载网页元素,其本质是向服务器发送请求并得到响应。

uid=str(input("输入查询用户的UID:"))   #输入目标的UID,作为一个字符串

url01="https://api.bilibili.com/x/relation/stat?vmid="+uid+"&jsonp=jsonp"  

#三个字符串加在一起,形成查粉丝数量的网址,来确定后续页数的范围

header01={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"}   #请求头参数,不解释了,照抄就行

res01=requests.get(url=url01,headers=header01)   #用request.get()函数,参数为url和headers,也就是网址和请求头,我们于是得到了服务器的响应

p=res01.text.find("follower")

fans_number=int(res01.text[p+10:len(res01.text)-2])   #这两步找到了目标的粉丝数量,定义为变量fans_number

fans_list=[]   #建立空列表来搜集信息

if fans_number>250:

    print("该用户粉丝数共",fans_number,"个,目前只能查询到前250位粉丝信息如下:")

    for i in range(0,5):

        url="http://api.bilibili.com/x/relation/followers?vmid="+uid+"&pn="+str(i+1)   #三个字符串加在一起,形成查粉丝信息的网址,i从0-4,页码就从1-5遍历

        header=header01   #用了最上面的请求头

        res=requests.get(url=url,headers=header)

        fans_data=str(res.text)   #对于某页,返回了文本形式的信息,我们将其字符串化即str(),定义为fans_data

        num=fans_data.count("uname")   #统计一下该页提供的粉丝数量,有可能是50不到,这一步在这里不需要,因为>250粉丝肯定有5页了,仅仅保持和后文的统一

        for i in range(0,num):

            a=fans_data.find("uname")

            b=fans_data.find("face")

            c=fans_data.find("track_id")

            fans_list.append(fans_data[a+8:b-3])

            fans_data=str(fans_data[c+10:]) 

#粉丝昵称是 "uname" 后的信息,紧接着提供了 “face” 即头像的信息,格式是固定的。所以这里利用了for循环和切片,将字符串中出现的第一个粉丝的名字提取出来并放入fans_list中,注意是自动放在了列表末尾,所以最后打印出的列表里排在越前面的粉丝是越近关注的。然后,裁减字符串,使得原先的第二个粉丝变为新字符串里的第一个粉丝,继续循环提取。

else:

    print("该用户粉丝数共",fans_number,"个,所有粉丝信息如下:")

    pagemax=int(fans_number/50)+1

#这里计算了页码信息。最大是pagemax页,比如粉丝数为200,pagemax=5;粉丝数为199,pagemax=4,int()是整数化

    for i in range(0,pagemax):

        url="http://api.bilibili.com/x/relation/followers?vmid="+uid+"&pn="+str(i+1)

        header=header01

        res=requests.get(url=url,headers=header)

        fans_data=str(res.text)

        num=fans_data.count("uname")

        for i in range(0,num):

            a=fans_data.find("uname")

            b=fans_data.find("face")

            c=fans_data.find("track_id")

            fans_list.append(fans_data[a+8:b-3])

            fans_data=str(fans_data[c+10:])

#同理,这部分是对粉丝数≤250的用户进行的爬取。

print(fans_list,len(fans_list))   #最终得到粉丝信息列表和这一列表的元素个数即粉丝数量。

代码运行实例:

①>250粉丝:uid=481701670

jupyter notebook

②≤250粉丝:uid=628602316

jupyter notebook

写在后面:

① python能支持将粉丝信息导出为“.xlsx”格式,这边也试着写了运行代码和注释。(考虑要不要发...)

② 运行实例中的用户真实存在,如您的昵称出现在内,纯属巧合。

③ 本文仅供参考,算不上解决很复杂的网页爬虫问题(这会涉及难易有别的HTML和Python知识),就当视为熟悉python的工具即可,谢谢!



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有