qq_40829639 2025-03-08 15:03 采纳率: 0%
浏览 35

怎么爬取b站番剧的真实评分

如何使用python爬取b站番剧真实评分,22年当时看过网友用爬虫统计出三体的真实评分,现在好像b站更新了新的反爬,这个代码用不了了

import requests
import json

print("----------------------------------------------------------------------------------")
print("三体动画B站评分")

counts = [0, 0, 0, 0, 0]

longs = 0
longt = 0
cursor = 0

while True:
    res = requests.get("https://api.bilibili.com/pgc/review/long/list?media_id=4315402&ps=20&sort=0&cursor={}".format(cursor))
    data = json.loads(res.text)
    for i in data["data"]["list"]:
        longs += i["score"]//2
        longt += 5
        counts[i["score"]//2-1] += 1

    if data["data"]["next"] != 0:
        cursor = int(data["data"]["next"])
    else:
        break

print("长评总星数:{},总长评数{},长评平均:{:.1f}".format(longs, longt//5, longs / longt * 10))

shorts = 0
shortt = 0
cursor = 0

while True:
    res = requests.get("https://api.bilibili.com/pgc/review/short/list?media_id=4315402&ps=20&sort=0&cursor={}".format(cursor))
    data = json.loads(res.text)
    for i in data["data"]["list"]:
        shorts += i["score"]//2
        shortt += 5
        counts[i["score"]//2-1] += 1

    if data["data"]["next"] != 0:
        cursor = int(data["data"]["next"])
    else:
        break

print("短评总星数:{},总短评数{},短评平均:{:.1f}".format(shorts, shortt//5, shorts / shortt * 10))
print("总星数:{},平均:{:.1f}".format(shorts + longs , (shorts+longs) / (shortt+longt) * 10))
for i in range(1,6):
    print("{}星人数{},占比{:.2f}%".format(i, counts[i-1], counts[i-1]/(longt+shortt)*500))

print("----------------------------------------------------------------------------------")

现在好像不行了,想问有没有其他办法,更新下这个代码,我想爬取一下mujica的真实评分

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-03-08 15:18
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    爬取 Bilibili 番剧真实评分

    Bilibili 的反爬虫机制确实会使得之前的爬虫代码无法工作。为了爬取番剧的真实评分,我们需要使用更加智能的爬虫技术和策略。

    以下是一个使用 Python 和 Scrapy 框架爬取 Bilibili 番剧真实评分的示例代码:

    import scrapy
    import json
    
    class BilibiliSpider(scrapy.Spider):
        name = "bilibili_spider"
        start_urls = [
            'https://api.bilibili.com/x/web-interface/view',  # 番剧详情页
        ]
    
        def parse(self, response):
            video_id = response.url.split('/')[-1]
            url = f'https://api.bilibili.com/x/web-interface/stat?aid={video_id}'
            yield scrapy.Request(url, callback=self.parse_stat)
    
        def parse_stat(self, response):
            data = json.loads(response.body.decode('utf-8'))
            if data['code'] == 0:
                stat = data['data']['stat']
                print(f'Video {video_id} has {stat["like"] + stat["dislike"]} ratings')
            else:
                print(f'Failed to get ratings for video {video_id}')
    

    这个爬虫使用 Scrapy 框架发送请求到 Bilibili 的 API,获取番剧的详情页和统计信息。然后,它将解析 JSON 数据,提取番剧的评分信息。

    请注意,这只是一个示例代码,实际上你可能需要使用更加复杂的策略和技术来爬取 Bilibili 的评分信息,例如使用代理、模拟浏览器行为、处理反爬虫机制等。

    另外,Bilibili 的 API 使用限制和反爬虫机制可能会使得爬虫代码无法工作,请确保你遵守 Bilibili 的使用条款和政策。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月8日