精华内容
下载资源
问答
  • 弹幕爬虫

    2020-12-18 14:03:25
    1.爬取 oid import re import requests # av_id:视频编号 av_id = 'BV1cy4y1k7A2' print("爬取视频编号为:{}".format(av_id)) ...# 用正则表达式匹配到对应的oid(弹幕id) match_rule = r'cid=(.*?)&a

    1.爬取 oid

    import re
    import requests
    # av_id:视频编号
    av_id = 'BV1cy4y1k7A2'
    print("爬取视频编号为:{}".format(av_id))
    
    # 爬取视频页面html
    resp = requests.get('https://www.bilibili.com/video/' + av_id)
    # print(resp.text)
    
    # 用正则表达式匹配到对应的oid(弹幕id)
    match_rule = r'cid=(.*?)&aid'
    oid = re.search(match_rule, resp.text).group().replace('cid=', '').replace('&aid', '')
    print('oid:' + oid)
    

    2.把 1封装成一个类

    #### 使用  b = Oid("视频编号")
    ####      oid = b.b.get_oid()
    import re
    import requests
    class Oid():
        def __init__(self,av_id):
            self.av_id=av_id
        def get_oid(self):
            # av_id:视频编号
            # av_id = 'BV1cy4y1k7A2'
            print("爬取视频编号为:{}".format(self.av_id))
            # 爬取视频页面html
            resp = requests.get('https://www.bilibili.com/video/' + self.av_id)
            # print(resp.text)
    
            # 用正则表达式匹配到对应的oid(弹幕id)
            match_rule = r'cid=(.*?)&aid'
            oid = re.search(match_rule, resp.text).group().replace('cid=', '').replace('&aid', '')
            # print('oid:' + oid)
            return oid
    b = Oid("BV1cy4y1k7A2")
    oid= b.get_oid()
    print("oid = {}".format(oid))
    

    3.弹幕接口:https://api.bilibili.com/x/v1/dm/list.so?oid=

    class Bilibili():
     def __init__(self, av_id):
        self.headers = {
            'Host': 'api.bilibili.com',
            'Connection': 'keep-alive',
            'Cache-Control': 'max-age=0',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Accept-Encoding': 'gzip, deflate, br',
            'Accept-Language': 'zh-CN,zh;q=0.9',
            'Cookie': 'finger=edc6ecda; LIVE_BUVID=AUTO1415378023816310; stardustvideo=1; CURRENT_FNVAL=8; buvid3=0D8F3D74-987D-442D-99CF-42BC9A967709149017infoc; rpdid=olwimklsiidoskmqwipww; fts=1537803390'
    
        }
        #### 调用 get_oid
        self.oid = Oid(av_id).get_oid()
        # print(self.oid)
        self.url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + self.oid
        self.barrage_reault = self.get_page()
    
    
    # 获取信息
     def get_page(self):
        try:
            # 延时操作,防止太快爬取
            time.sleep(0.5)
            response = requests.get(self.url, headers=self.headers)
        except Exception as e:
            print('获取xml内容失败,%s' % e)
            return False
        else:
            if response.status_code == 200:
                # 下载xml文件
                with open('bilibili.xml', 'wb') as f:
                    f.write(response.content)
                return True
            else:
                return False
    
    
    # 解析网页
     def param_page(self):
        time.sleep(1)
        if self.barrage_reault:
            # 文件路径,html解析器
            html = etree.parse('bilibili.xml', etree.HTMLParser())
            # xpath解析,获取当前所有的d标签下的所有文本内容
            results = html.xpath('//d//text()')
            return results
    
    
    b=Bilibili("BV1cy4y1k7A2")
    danmu_result = b.param_page()
    print(danmu_result)
    

    4.效果:

    在这里插入图片描述
    在这里插入图片描述

    5. 参考链接

    6. 我的该项目 github 链接

    展开全文
  • bilibili弹幕爬虫, 2019-1-10

    千次阅读 2019-01-11 18:02:42
    bilibili弹幕爬虫 示例网址: https://www.bilibili.com/video/av21483276 视频弹幕网址: https://comment.bilibili.com/35358033.xml 视频下载地址: ...

    bilibili弹幕爬虫

    示例网址:
    https://www.bilibili.com/video/av21483276

    视频弹幕网址:
    https://comment.bilibili.com/35358033.xml

    视频下载地址:
    https://upos-hz-mirrorwcsu.acgvideo.com/upgcxcode/33/80/35358033/35358033-1-32.flv?e=ig8euxZM2rNcNbR1hwdVhoM1hWdVhwdEto8g5X10ugNcXBlqNxHxNEVE5XREto8KqJZHUa6m5J0SqE85tZvEuENvNC8xNEVE9EKE9IMvXBvE2ENvNCImNEVEK9GVqJIwqa80WXIekXRE9IMvXBvEuENvNCImNEVEua6m2jIxux0CkF6s2JZv5x0DQJZY2F8SkXKE9IB5QK==&deadline=1547186777&gen=playurl&nbs=1&oi=3056465252&os=wcsu&platform=pc&trid=2ee0f4513d654dc4a6b4cd9d37f2a59a&uipk=5&upsig=b5084f0c9b0308489c7836a3efee6fd9

    其实是根据网上的帖子反推的

    1. 找35358033
      在这里插入图片描述
      在window.__playinfo__标签下

    有点复杂,再找

    在这里插入图片描述

    找到了最右面视频的地址,直接可以下载

    找了一圈
    决定从下面入手

    在这里插入图片描述

    在这里插入图片描述
    re.findall(r"\"pages\"\:\[\{\"cid\":(.*?)\,", res, re.S)[0]

    上代码

    import requests
    from lxml import etree
    import re
    from pprint import pprint
    import json
    
    
    class Bili(object):
        def __init__(self, url_num):
            self.name = "av号" + str(url_num)
            self.url = "https://www.bilibili.com/video/av{}/".format(url_num)
            self.headers = {
                "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
            }
    
        def parse(self,url):
            response = requests.get(url, headers=self.headers)
            res = response.content.decode()
            return res
    
        def get_content(self, res):
            html = etree.HTML(res)
            item = {}
            item["title"] = html.xpath("//div[@id='viewbox_report']/h1/@title")[0] if len(
                html.xpath("//div[@id='viewbox_report']/h1/@title")) > 0 else None
            if item["title"]:
                item["cid"] = re.findall(r"\"pages\"\:\[\{\"cid\":(.*?)\,", res, re.S)[0]
            else:
                return None
            print(item)
            return item
    
        def get_url(self, item):
            cid = item["cid"]
            danmu_url = "https://comment.bilibili.com/{}.xml".format(cid)
            print(danmu_url)
            return danmu_url
    
        def get_danmu(self, res, item):
            print("0"*100)
            pprint(res)
            print("0" * 100)
            html = etree.HTML(res.encode())
            print(html)
            item["弹幕"] = html.xpath("//d/text()")
            # pprint(item)
            return item
    
        def save(self, name, content):
            with open("{}.json".format(name), "a", encoding="utf-8")as f:
                f.write(json.dumps(content, ensure_ascii=False, indent=4))
                print("保存成功")
    
        def run(self):
            item = {}
            # 1 获取url
            # 2 发送请求,获取相应
            res = self.parse(self.url)
            # 3 提取cid和标题
            item = self.get_content(res)
            if item == None:
                print("vid号不正确,请重新输入。")
                return
            # 4 组合弹幕url
            danmu_url = self.get_url(item)
            # 5 发送请求获取相应
            res_danmu = self.parse(danmu_url)
            # 6 提取
            end = self.get_danmu(res_danmu, item)
            # 7 保存
            self.save(self.name, end)
            print("程序结束")
    
    
    if __name__ == '__main__':
        # url_num = input("请输入8位视频av号:")
        url_num = 21483276
        print("url_num=", url_num)
        b = Bili(url_num)
        b.run()
    

    参考

    https://blog.csdn.net/qq_22043649/article/details/80985903

    https://blog.csdn.net/a360316515/article/details/83058481

    展开全文
  • bilibili弹幕爬虫(python面向对象)

    千次阅读 2018-07-10 14:48:15
    bilibili弹幕爬虫 (python) 一个简单的弹幕爬虫,大概说下思路和爬取过程,完整代码放最下面 b站更新了,普通的抓包不好抓了,但办法还是有的: - 1、找到cid https://www.bilibili.com/video/av21483276 如图...

    bilibili弹幕爬虫 (python)

    一个简单的弹幕爬虫,大概说下思路和爬取过程,完整代码放最下面
    b站更新了,普通的抓包不好抓了,但办法还是有的:
    1、找到cid
    https://www.bilibili.com/video/av21483276 如图:
    这里写图片描述
    2、提取cid
    用正则提取出来即可:

    import re
    cid = re.findall(r"cid=([\d]+)&",res)[0]

    3、通过cid获取包含弹幕的响应的url地址
    用字符串拼接即可得到:https://comment.bilibili.com/35358033.xml
    这里写图片描述
    4、最后用xpath提取弹幕

    item["弹幕"] = html.xpath("//d/text()")

    5、保存
    这里写图片描述
    完整代码:

    import requests
    from lxml import etree
    import re
    from pprint import pprint
    import json
    
    class Bili(object):
        def __init__(self,url_num):
            self.name = "av号"+str(url_num)
            self.url = "https://www.bilibili.com/video/av{}".format(url_num)
            self.headers = {
                "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
            }
    
        def parse(self, url):
            response = requests.get(url,headers=self.headers)
            res = response.content.decode()
            return res
    
        def get_content(self,res):
            html = etree.HTML(res)
            item = {}
            item["title"] = html.xpath("//div[@id='viewbox_report']/h1/@title")[0] if len(html.xpath("//div[@id='viewbox_report']/h1/@title"))>0 else None
            if item["title"]:
                item["cid"] = re.findall(r"cid=([\d]+)&",res)[0]
            else:
                return None
            print(item)
            return item
    
        def get_url(self, item):
            cid = item["cid"]
            danmu_url = "https://comment.bilibili.com/{}.xml".format(cid)
            print(danmu_url)
            return danmu_url
    
        def get_danmu(self, res, item):
            # pprint(res)
            html = etree.HTML(res.encode())
            item["弹幕"] = html.xpath("//d/text()")
            # pprint(item)
            return item
    
        def save(self, name, content):
            with open("{}.json".format(name),"a",encoding="utf-8")as f:
                f.write(json.dumps(content,ensure_ascii=False,indent=4))
                print("保存成功")
    
        def run(self):
            item = {}
            # 1 获取url
            # 2 发送请求,获取相应
            res = self.parse(self.url)
            # 3 提取cid和标题
            item = self.get_content(res)
            if item==None:
                print("vid号不正确,请重新输入。")
                return
            # 4 组合弹幕url
            danmu_url = self.get_url(item)
            # 5 发送请求获取相应
            res_danmu = self.parse(danmu_url)
            # 6 提取
            end = self.get_danmu(res_danmu, item)
            # 7 保存
            self.save(self.name,end)
            print("程序结束")
    
    
    if __name__ == '__main__':
        # url_num = input("请输入8位视频av号:")
        url_num = 21483276
        print("url_num=",url_num)
        b = Bili(url_num)
        b.run()

    展开全文
  • [Python] [Bilibili] B站历史弹幕爬虫

    千次阅读 2020-02-26 16:39:57
    b站历史弹幕爬虫,以b站弹幕最多的天鹅臂视频为例。

    b站弹幕最多的天鹅臂视频为例,可视化效果见哪位艺人的老婆们最有毅力?b站弹幕爬虫及可视化

    1. 最新弹幕

    最新弹幕可以通过NetWork中的list.so...获取,具体操作可参考历史弹幕的爬取。
    在这里插入图片描述
    但是最新弹幕只能最多获取3000条,如果视频的弹幕超过3000条,则需要通过别的方式获取。
    在这里插入图片描述

    2. 历史弹幕

    2.1 探索

    观察弹幕列表可以发现,b站提供了历史弹幕的查看途径。
    在这里插入图片描述
    点击不同的日期,可以发现不断有以history?开头的资源加载进来。
    在这里插入图片描述
    从预览中可以看到,其实就是对应日期最新的3000条弹幕。观察一下url,有关的参数是typeoiddateoid就是视频对应的id,date则是日期,type暂时不知道干哈的。

    https://api.bilibili.com/x/v2/dm/history?type=1&oid=5627945&date=2020-03-02
    

    再把这个网址放到没有登录b站账号的浏览器打开,显示账号未登录,也就是需要登录才能获取数据,可以考虑用模拟登录解决。
    在这里插入图片描述

    2.2 数据获取

    2.2.1 模拟登录

    用的是selenium搭配谷歌浏览器,需要先配置一下和浏览器版本匹配的驱动,可自行百度或参考这里的第五点

    # 导入需要的包
    from bs4 import BeautifulSoup as bs
    import pandas as pd
    import re
    from selenium import webdriver
    import time, datetime
    
    # 模拟登录
    ## 登录界面链接
    url = 'https://passport.bilibili.com/login'
    ## 模拟登录启动
    driver = webdriver.Chrome()
    driver.get(url)
    ## 接下来就是在打开的谷歌浏览器里手动登录一下自己的账号,
    ## 	* 因为b站登录需要验证,这一步自动化的代价比较大,所以手动了。
    

    2.2.2 获取每一天的数据

    探索部分,看看即可:

    # 以2019-01-01为例
    date = '2019-01-01'
    url = 'https://api.bilibili.com/x/v2/dm/history?type=1&oid=5627945&date=%s'%date
    
    # 转入历史弹幕的页面
    driver.get(url)
    
    # 获取数据部分的html
    html = driver.find_element_by_tag_name('i').get_attribute('innerHTML')
    
    # 解析
    soup = bs(html, 'lxml')
    
    # 先康康第一条
    print(soup.find('d'))
    # 弹幕内容
    print(soup.find('d').text)
    # 弹幕其他信息
    print(soup.find('d').get('p'))
    
    # 经过一番探索,以逗号分割,第一个参数是视频时间(秒),第五个参数是时间戳,第七个参数是用户id,其他反正暂时不重要,不探索了
    # 整理成DataFrame
    data = pd.DataFrame([i.get('p').split(',') + [i.text] for i in soup.findAll('d')], \
                        columns=['second', 'b', 'c', 'd', 'timestamp', 'f', 'user', 'h', 'text'])
    data.head(2)
    

    在这里插入图片描述
    封装成函数后:

    def get_per_day(date):
        # url
        url = 'https://api.bilibili.com/x/v2/dm/history?type=1&oid=5627945&date=%s'%date
        # 转入历史弹幕的页面
        driver.get(url)
        # 获取并解析
        soup = bs(driver.find_element_by_tag_name('i').get_attribute('innerHTML'), 'lxml')
        # 整理成DataFrame
        data = pd.DataFrame([i.get('p').split(',') + [i.text] for i in soup.findAll('d')], \
                        columns=['second', 'b', 'c', 'd', 'timestamp', 'f', 'user', 'h', 'text'])
        # 只取有用的列
        data = data[['timestamp', 'text']]
        return data
    

    2.2.3 获取一段时间的数据

    探索部分,看看即可:

    # 设定开始和结束日期
    start = '2019-01-01'
    end = '2019-02-01'
    
    # 创建空DataFrame方便后面放数据
    data = pd.DataFrame()
    
    # 转成日期形式方便加天数
    start = pd.datetime.strptime(start, '%Y-%m-%d')
    end = pd.datetime.strptime(end, '%Y-%m-%d')
    
    # 循环
    while start <= end:
        date = pd.datetime.strftime(start, '%Y-%m-%d')
        print(date,end=', ')
        data = data.append(get_per_day(date))
        start = start + datetime.timedelta(days=1)
    

    封装成函数后:

    def get_period(start, end):
        # 创建空DataFrame方便后面放数据
        data = pd.DataFrame()
    
        # 转成日期形式方便加天数
        start = pd.datetime.strptime(start, '%Y-%m-%d')
        end = pd.datetime.strptime(end, '%Y-%m-%d')
    
        # 循环
        while start <= end:
            date = pd.datetime.strftime(start, '%Y-%m-%d')
            print(date,end=', ')
            data = data.append(get_per_day(date))
            # 去重(因为如果当天弹幕量不到3000会获取到前一天的弹幕,导致数据大量重复)
            data.drop_duplicates(inplace=True)
            start = start + datetime.timedelta(days=1)
            
        return data
    

    于是就可以通过设定开始和结束的时间爬取一段时间的弹幕。

    data = get_period('2019-01-01', '2019-01-31')
    

    2.2.4 代码整理

    如果不想看上面的部分,直接复制下面这段。

    def get_per_day(date, driver):
    	'''
    	获取一天的数据
    	date: 	str, %Y-%m-%d
    	'''
        # url
        url = 'https://api.bilibili.com/x/v2/dm/history?type=1&oid=5627945&date=%s'%date
        # 转入历史弹幕的页面
        driver.get(url)
        # 获取并解析
        soup = bs(driver.find_element_by_tag_name('i').get_attribute('innerHTML'), 'lxml')
        # 整理成DataFrame
        data = pd.DataFrame([i.get('p').split(',') + [i.text] for i in soup.findAll('d')], \
                        columns=['second', 'b', 'c', 'd', 'timestamp', 'f', 'user', 'h', 'text'])
        # 只取有用的列
        data = data[['timestamp', 'text']]
        return data
    
    def get_period(start, end):
    	'''
    	先登录,然后获取数据。
    	start: 	str, %Y-%m-%d
    	end:	str, %Y-%m-%d
    	'''
    	# 登录
    	url = 'https://passport.bilibili.com/login'
    	driver = webdriver.Chrome()
    	driver.get(url)
    	input('请在浏览器登录账号后回车')
    	
        # 创建空DataFrame方便后面放数据
        data = pd.DataFrame()
    
        # 转成日期形式方便加天数
        start = pd.datetime.strptime(start, '%Y-%m-%d')
        end = pd.datetime.strptime(end, '%Y-%m-%d')
    
        # 循环
        while start <= end:
            date = pd.datetime.strftime(start, '%Y-%m-%d')
            # 时不时打印一下方便追踪进度
            if start.day == 1:
            	print(date,end=', ')
           	# 拼接数据
            data = data.append(get_per_day(date, driver))
            # 去重
            data.drop_duplicates(inplace=True)
            # 下一天
            start = start + datetime.timedelta(days=1)
            
        return data
    
    data = get_period('2019-01-01', '2019-12-31')
    

    2.3 数据处理

    2.3.1 计算弹幕发送时间

    把获取的时间由时间戳专成字符串或整型。

    # 转成字符串
    #data['time'] = data['timestamp'].apply(lambda x: time.strftime("%Y%m%d", time.localtime(int(x))))
    # 转成整型方便后面计算
    data['time'] = data['timestamp'].apply(lambda x: int(time.strftime("%Y%m%d", time.localtime(int(x)))))
    

    2.3.2 从弹幕中提取各种粉丝类型和明星名字

    有很多种方法,规则的学习成本最低所以用规则,具体不讲了,主要就是正则匹配。

    def clean(text):
        for i in ['前面的', '前面', \
                  '前边儿的', '前边儿', '前边', '你的', '讨厌', '感觉'\
                  '我是', '小姐姐', '挥着翅膀', '这位', '这个动作', \
                  '我以后养', '大姨妈', '来姨妈', '姨妈', '第四天', '第五天', '第三天', '第二天', \
                  '坠机', '哈哈', '广场舞大妈', '做到这里', '已经', '安利', '我的妈', '一半', \
                  '没有', '要做', '撞妈', '心疼', '鸡翼', '要成为', '好多', '未来']:
            text = text.replace(i, '')
        
        pattern = r'([^,.,。 !!??()\t0-9吗呜了啊的🟢着呦他说我你是·]{2,})'
        return text, pattern
    
    def find_relation(text, names):
        text, pattern = clean(text)
        for i in names:
            pa = re.compile(pattern+i)
            if len(pa.findall(text)) != 0:
                return pa.findall(text)[0]
        return None
    
    wife = ['的大老婆', '大老婆', \
            '的小老婆', '小老婆', \
            '的老婆', '老婆', \
            '的真老婆', '真老婆', \
            '的脑婆', '脑婆', \
            '的夫人', '夫人', \
            '的妻子', '妻子']
    girlfriend  = ['的女朋友', '女朋友', \
                   '的女票', '女票', \
                   '的对象', '脑婆', \
                   '的女盆友', '女盆友', \
                   '的女友', '女友']
    mon = ['的麻麻', '麻麻', \
          '的妈妈', '妈妈', \
          '的妈', '妈', \
          '的亲妈', '亲妈', \
          '的亲麻', '亲麻', \
          '的母亲', '母亲', \
          '的马麻', '马麻', \
          '的妈粉', '妈粉']
    women = ['的女人', '女人']
    girl = ['的女孩', '女孩']
    daughter = ['的女儿', '女儿']
    sister = ['的姐姐', '姐姐', \
             '的妹妹', '妹妹']
    
    relation_dic = {'wife': '老婆', 'girlfriend': '女朋友', 'mon': '妈妈', \
                   'women': '女人', 'girl': '女孩', 'daughter': '女儿', \
                   'sister': '姐妹'}
    
    data['wife'] = data['text'].apply(lambda x: find_relation(x, wife))
    data['girlfriend'] = data['text'].apply(lambda x: find_relation(x, girlfriend))
    data['mon'] = data['text'].apply(lambda x: find_relation(x, mon))
    data['women'] = data['text'].apply(lambda x: find_relation(x, women))
    data['girl'] = data['text'].apply(lambda x: find_relation(x, girl))
    data['daughter'] = data['text'].apply(lambda x: find_relation(x, daughter))
    data['sister'] = data['text'].apply(lambda x: find_relation(x, sister))
    

    在这里插入图片描述

    2.3.3 汇总每一天

    relation_count = pd.DataFrame()
    for k,v in relation_dic.items():
        df = pd.DataFrame(data.groupby(['time', k]).size())
        df.reset_index(inplace=True)
        df.columns = ['date', 'name', 'value']
        df['type'] = v
        relation_count = relation_count.append(df)
    

    在这里插入图片描述

    2.3.4 计算累计值

    dates = data['time'].unique()
    relation_sum = pd.DataFrame()
    for i in dates:
        df = pd.DataFrame(relation_count[relation_count['date'] <= i].groupby(['name', 'type']).sum()['value'])
        df.reset_index(inplace=True)
        df['date'] = '%s-%s-%s'%(str(i)[:4], str(i)[4:6], str(i)[6:])
        df.sort_values('value', ascending=False, inplace=True)
        relation_sum = relation_sum.append(df.iloc[:30])
    relation_sum['name'] = relation_sum.apply(lambda x: str(x['name'])+'的'+x['type'], axis=1)
    

    在这里插入图片描述

    展开全文
  • B站弹幕爬虫

    千次阅读 2020-02-03 18:48:41
    作者:Huangwei AI 来源:Python与机器学习之路前言B站作为弹幕文化的代表,有着非常丰富的弹幕资源。今天我们尝试对B站的弹幕进行爬虫并且绘制词云图展示爬虫...
  • B站视频弹幕爬虫相关操作如何寻找oid完整代码文件截图 相关操作 如何寻找oid 按F12,点击展开 点击查看历史弹幕,点击日期 找到含有oid的url 完整代码 #!/usr/bin/env python # coding: utf-8 import ...
  • 干货:手把手教你——某宝直播弹幕爬虫
  • 设置弹幕数量 barrage_sum = 1000 # 4.获取视频的ID for key in keys: path = "https://search.bilibili.com/all?keyword={}".format(key) resp = requests.get(path, headers=headers) resp.encoding = "utf-...
  • 淘宝直播弹幕爬虫

    千次阅读 2017-12-09 03:38:25
    公司有通过淘宝直播间短链接来爬取直播弹幕的需求, 奈何即便google上面也仅找到一个相关的话题, 还没有答案. 所以只能自食其力了.爬虫的github仓库地址在文末, 我们先看一下爬虫的最终效果: 下面我们来抽丝剥茧, ...
  • 斗鱼直播弹幕爬虫

    2018-06-27 18:34:00
    斗鱼弹幕服务器和一般的网页内容不一样,通过socket通信连接。斗鱼规定了弹幕的协议。 过程如下: 向斗鱼弹幕服务器发起连接房间请求,服务器回应;发起进入弹幕组请求,服务器回应;然后服务器持续发送弹幕消息,...
  • 开始 打开浏览器, 打开bilibili, 找个视频, F12, network, response, 是这个样子的: ...通过大佬的文章也推测出了弹幕网址的格式:https://comment.bilibili.com/***.xml 然后我们就找***就O...
  • 为什么一直出现Process finished with exit code 0?到底怎么才能进行爬虫啊?
  • 今天小姐姐就教你做一个简单的B站弹幕爬虫,让你在没有观看视频的情况下就能预先知道大家都在弹幕里面评论了什么,并且什么是大家说的最多的词语。话不多说,现在我们就开始学习B站弹幕的python爬虫吧! 【效果预览...
  • 抖音直播弹幕爬虫教程,抖音接口抖音协议教程前言:抖音直播间公屏信息解析,说白了就是将抖音直播间公屏上加密的数据小白化,然后直接拉取出来保存在本地,比如某某送了礼物、某某关注了主播、某某说了句什么话、...
  • 【python--爬虫】b站弹幕爬虫

    千次阅读 2020-08-03 19:34:42
    获取bilibili直播间弹幕 房间号从url上获取。 例如直播间url为:https://live.bilibili.com/21584153?visit_id=2vnqkd7xmr28 房间号就为:21584153 获取不同房间的弹幕:修改第26行的roomid的值为对应的房间号 "...
  • 先使用Ctrl+R命令重新加载网页,然后通过过滤器搜索bullet 或者 danmu(弹幕弹幕数据是以 .z 形式的压缩文件存在的(business:danmu) 6.2 弹幕数据下载过程 如何获取tvid列表? 如何根据tvid获取弹幕压缩...
  • 在网上找到了一份斗鱼弹幕服务器第三方接入协议v1.6.2,有了第三方接口,做起来就容易多了。 一、协议分析 斗鱼后台协议头设计如下: 这里的消息长度是我们发送的数据部分的长度和头部的长度之和,两个消息...
  • #资源达人分享计划#
  • 点击查看博客????[B站弹幕爬虫+中文词云(蒙版形状)] (3条消息) B站弹幕爬虫+中文词云(蒙版形状)_m0_57356467的博客-CSDN博客https://blog.csdn.net/m0_57356467/article/details/120287172
  • 后浪视频弹幕爬取制作词云 弹幕被删了应该,我这个只有三条,逻辑最重要呀。 啊啊啊啊啊超级想吐槽,因为词云不熟悉,所以浪费了我很多时间 。还好结局是完美的! 还有重要的一点,弹幕和视频是分开的,在network中...
  • 开启弹幕已经成为很多年轻人看剧时的一种习惯。最近大热的几部电视剧,弹幕也十分精彩有趣,甚至出现“弹幕比剧好看”的现象。 ▼ 弹幕的出现消解了观影的孤独感,增加了互动性。可以说,弹幕是对视频作品的二次...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,633
精华内容 1,053
关键字:

弹幕爬虫

爬虫 订阅