爬取B站评论(2019.5.28)

看到B站一个up主使用人工统计楼层,去除重复用户,然后excel抽奖,感觉太费劲了,帮他写了个小脚本,代码没亮点,只实现了最基本的爬用户id和抽奖功能,没有做模块化处理,也没有加入多线程提高速度,后续慢慢学习继续丰富

1、原始版本(2019.5.28)

#!/usr/bin/env python
# coding: utf-8
import requests 
import json
import random
import os

av_id=input('输入av_id   ')  # 视频号

r=requests.get(
    'https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn=1&type=1&oid={}&sort=2&_=1558948726737'.format(av_id))  
    # 这个json地址获取方法:随便找一个评论用户的ID,在网页F12中CTRL+f 搜索 ,可以找到一个地址,复制地址,去掉callback回调部分
data=json.loads(r.text)
page_count=(data['data']['page']['count'])//20+1  # 获取总页数,本来想用xpath直接爬到总页数,后来发现json里有个count总楼层数统计,所以可以计算出总页数
# pprint.pprint(data['data']['replies'])
# 这个json里不只有用户id ,而且能找到用户评论,楼中楼的用户ID 评论等

user_list=[] # 保存用户名

for pg_num in range(1,page_count+1):  # 循环获取所有页面上的用户名,这地方运行速度慢,后续尝试利用多线程加快速度
    print('爬取第{}页...'.format(pg_num))
    r=requests.get(
    'https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn={}&type=1&oid={}&sort=2&_=1558948726737'.format(pg_num,av_id))
    data=json.loads(r.text)

    for i in data['data']['replies']:  # 每页有20层楼,遍历这20层楼获取ID
    #     pprint.pprint(i['member']['uname'])
        user_list.append(i['member']['uname'])


print('所有评论用户的id',user_list)

# 所有评论用户的id

# 抽奖模块
print('\n\n\n\n')
print('原长度:',len(user_list),'去重后的长度:',len(set(user_list)))  # 去重 ,防止多次回复拉高中奖几率

luck_user=random.choice(user_list)
print('幸运观众:',luck_user)
os.system("pause") # 如果是直接双击运行该文件,那么运行完成后cmd窗口会直接关闭,加入这一条便于查看输出结果,当然也可以把运行结果写入txt文件内

json请求地址获取:
wow!awesome man!!
爬取B站评论(2019.5.28)_第1张图片

你可能感兴趣的:(爬取B站评论(2019.5.28))