吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3379|回复: 29
收起左侧

[Python 原创] b站评论信息爬取

  [复制链接]
shiyier 发表于 2023-1-22 15:48

b站评论信息爬取

​ 最近有个客户想要爬取鬼灭之刃第一季的评论数据,简单看了一下哔哩哔哩君子协议里面没有限制这方面,直接开搞!

分析网页

​ 打开评论页面,可以看到分为短评(128702)和长评(639)条。常规操作直接F12打开网络观察发送的请求数据。

​ 在评论页面往下翻几下就可以看到有个url是“list?“开头的,点开预览果然就是哔哩哔哩评论的api了。找到了api就很好办了,直接分析一下api的组成和需要传递的参数。

<img src="https://s3.bmp.ovh/imgs/2023/01/22/47e119d7802ecc68.png" style="zoom:33%;" />

<img src="https://s3.bmp.ovh/imgs/2023/01/22/06c9384ad417ec4c.png" style="zoom:33%;" />

分析b站api
https://api.bilibili.com/pgc/review/short/list?media_id=22718131&ps=20&sort=0&cursor=83215035767195

​ 观察一下链接,有个short字段,这个就是对应的短评,如果换成long就是长评。

​ ”ps=20“就是一页的数据。”media_id=22718131“就是番剧的id。

​ ”cursor“字段就是数据的地址,每次请求数据返回的json数据都会有下一页的cursor。

代码

​ 这些分析好之后就可以着手写代码了。代码也很简单,都是最基础的东西。

import requests
import json
import time
import csv

'''包括评分用户id及会员等级、具体评分星级、长评以及短评的评论内容、评分时间,'''

def timefun(time1):
    time1 = int(time1)
    timeArray = time.localtime(time1)
    times = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)  # 时间
    return times

def levels_get(mid, proxies):

    url = f'https://api.bilibili.com/x/space/wbi/acc/info?mid={str(mid)}'
    header = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
        'cookie': "_uuid=B31794AC-389B-5ABE-431A-4A457532710F563197infoc; buvid3=90E810B6-24C7-0FD9-FCEB-FFAAD82CE42266124infoc; b_nut=1666688064; buvid4=C5894024-2549-4CC5-B6CC-4CE4F3C6025F66124-022102516-ueloTil9hhszmIQpPi1hPg==; buvid_fp_plain=undefined; i-wanna-go-back=-1; nostalgia_conf=-1; rpdid=|(u))umkR)l|0J'uYY)Y~lkkl; bsource=search_google; LIVE_BUVID=AUTO2616698028069789; is-2022-channel=1; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; CURRENT_QUALITY=120; fingerprint=5fdc996e8cc80fd6b9c56ffc54ce7181; sid=8dtevv76; bp_video_offset_83512806=744605732851155000; buvid_fp=5fdc996e8cc80fd6b9c56ffc54ce7181; b_lsid=F72104910B_18557CE9216; b_ut=7; innersign=1; PVID=8",
    }
    try:
        rs = requests.get(url, headers=header,proxies=proxies)
    except:
        proxies = gengxin()

        rs = requests.get(url, headers=header, proxies=proxies, timeout=10)
    datad = json.loads(rs.text)
    try:
        return datad['data']['level']
    except:
        return 'Nah'

cursor = 78670930957092
while cursor != '老6':
    url = f'https://api.bilibili.com/pgc/review/long/list?media_id=22718131&ps=20&sort=0&cursor={cursor}'
    print(url)
    while True:
        try:
            r = requests.get(url, timeout=5)
            data = json.loads(r.text)
            break
        except:
            print('请求超时')
            time.sleep(1)

    for i in data['data']['list']:
        uname = i['author']['uname']#用户昵称
        userid = i['author']['mid']#用户id
        score = i['score']#用户评分
        content = i['content']#用户评论内容
        time_unix = int(i['mtime'])
        times = timefun(time_unix)
        # middd = levels_get(userid, proxies)
        middd = 'Nah'
        print(times, uname, userid, middd, score, content)
        with open("test.csv", "a", newline='',encoding='UTF8') as csvfile:
            writer = csv.writer(csvfile)
            # 写入多行用writerows
            writer.writerow([times, uname, userid, middd, score, content])

    cursor = data['data']['next']
    print(f'下一个页面{cursor}')

免费评分

参与人数 8吾爱币 +14 热心值 +8 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
debug_cat + 1 + 1 用心讨论,共获提升!
Bob5230 + 1 + 1 我很赞同!
Naive2021 + 1 + 1 谢谢@Thanks!
woyucheng + 1 + 1 用心讨论,共获提升!
CangZhouYuHe + 1 + 1 我很赞同!
vethenc + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
黑火之源 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| shiyier 发表于 2023-1-22 18:34
Mzxr 发表于 2023-1-22 17:18
楼主把cookie放出来会不会有危险?

我给忘了
给兄弟们用用大会员吧

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
skywalker0123 + 1 + 1 谢谢@Thanks!

查看全部评分

Mzxr 发表于 2023-1-22 17:18
QZMASE 发表于 2023-1-22 17:00
8970665 发表于 2023-1-22 17:40
一条评论都不能放过
urdarling 发表于 2023-1-22 18:26
平论采集的确有时候很有用
 楼主| shiyier 发表于 2023-1-22 18:34
QZMASE 发表于 2023-1-22 17:00
bilibili:什么?原来我没写,这就给你加上

哈哈哈哈6
jwzb 发表于 2023-1-22 19:09
楼主能不能写个,可以任意爬取的代码
hackxiaobai 发表于 2023-1-22 21:59
感谢楼主的分享
 楼主| shiyier 发表于 2023-1-22 22:43
jwzb 发表于 2023-1-22 19:09
楼主能不能写个,可以任意爬取的代码

可以发悬赏
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 21:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表