如何写一只抓哔哩哔哩弹幕的爬虫

2024-03-13 03:32
文章标签 爬虫 哔哩 一只 弹幕

本文主要是介绍如何写一只抓哔哩哔哩弹幕的爬虫,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://blog.csdn.net/bigbigsman/article/details/78639053

如何写一只抓哔哩哔哩弹幕的爬虫

爬虫工作流程

  1. 解析首页获得视频cid
  2. 构造所有的获取弹幕链接
  3. 解析xml文件并插入数据库
  4. 遍历获取每一集的弹幕内容

1、解析首页获取每一集的cid和内容

访问静态页面,利用lxml解析视频cid和视频内容 
解析如下标记的内容: 
标记的图片

2、构造获取弹幕链接

构造得到弹幕的链接很简单,根据第一步得到的cid

http://comment.bilibili.com/{cid}.xml #cid 第一步获得的
  • 1

根据cid构造url 访问获取弹幕,返回的是xml文件。 
如下: 
这里写图片描述

3、弹幕xml文件解析

获取的弹幕xml格式如下:

<d p="533.67199707031,1,25,41194,1498943949,0,7edeebe9,3511616609">刀还是没有枪快</d>
  • 1

p这个字段里面的内容: 
0,1,25,16777215,1312863760,0,eff85771,42759017中几个逗号分割的数据 
第一个参数是弹幕出现的时间以秒数为单位。 
第二个参数是弹幕的模式1..3 滚动弹幕 4底端弹幕 5顶端弹幕 6.逆向弹幕 7精准定位 8高级弹幕 
第三个参数是字号, 12非常小,16特小,18小,25中,36大,45很大,64特别大 
第四个参数是字体的颜色以HTML颜色的十进制为准 
第五个参数是Unix格式的时间戳。基准时间为 1970-1-1 08:00:00 
第六个参数是弹幕池 0普通池 1字幕池 2特殊池【目前特殊池为高级弹幕专用】 
第七个参数是发送者的ID,用于“屏蔽此弹幕的发送者”功能 
第八个参数是弹幕在弹幕数据库中rowID 用于“历史弹幕”功能。

4、遍历获取每一集的弹幕

爬虫源码

#coding=utf-8
from lxml import etree
import requests, re, time
import datetime
import sys,sqlite3,os   #初始化数据库
if os.path.exists('bilbili.db'):cx = sqlite3.connect('bilbili.db', check_same_thread = False)
else:cx = sqlite3.connect('bilbili.db', check_same_thread = False)cx.execute('''create table comment(videoname text,chatid text,dtTime text, danmu_model text, font text, rgb text, stamp text, danmu_chi text, userID text, rowID text,message text)''')def request_get_comment(getdetail):'''#获取弹幕内容'''name,url,cid=getdetail# url='http://www.bilibili.com'+urlurl='http://comment.bilibili.com/{}.xml'.format(cid)#preurl='http://www.bilibili.com'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)'}response = requests.get(url=url, headers=headers)tree=etree.HTML(response.content)message=tree.xpath('//d/text()')infos=tree.xpath('//d/@p')comment=[info.split(',') for info in infos]saveme=[]# comments=[(cid,i) for i in zip(infos,message)]for i in range(len(comment)-1):# print itry:saveme.append((name,cid,comment[i][0],comment[i][1],comment[i][2],comment[i][3],comment[i][4],comment[i][5],comment[i][6],comment[i][7],message[i]))except Exception as e:print(e)continue# print savemecx.executemany('''INSERT INTO comment VALUES(?,?,?,?,?,?,?,?,?,?,?)''',saveme)cx.commit()def indexget(url):'''解析首页获取name,value,cid'''r=requests.get(url)tree=etree.HTML(r.content)name=tree.xpath('//option/text()')value=tree.xpath('//option/@value')cid=tree.xpath('//option/@cid')return [i for i in zip(name,value,cid)]        return True
if __name__ == "__main__":'''eg: python xxx.py urlpython xxx.pyurl:'http://www.bilibili.com/video/av3663007'       '''if len(sys.argv)>1:first_url = sys.argv[1] or 'http://www.bilibili.com/video/av3663007'else:first_url='http://www.bilibili.com/video/av3663007' preurl='http://www.bilibili.com'get_comment_url= indexget(first_url)for i in get_comment_url:print (i)request_get_comment(i)cx.close()

这篇关于如何写一只抓哔哩哔哩弹幕的爬虫的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/803517

相关文章

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Golang 网络爬虫框架gocolly/colly(五)

gcocolly+goquery可以非常好地抓取HTML页面中的数据,但碰到页面是由Javascript动态生成时,用goquery就显得捉襟见肘了。解决方法有很多种: 一,最笨拙但有效的方法是字符串处理,go语言string底层对应字节数组,复制任何长度的字符串的开销都很低廉,搜索性能比较高; 二,利用正则表达式,要提取的数据往往有明显的特征,所以正则表达式写起来比较简单,不必非常严谨; 三,使

Golang网络爬虫框架gocolly/colly(四)

爬虫靠演技,表演得越像浏览器,抓取数据越容易,这是我多年爬虫经验的感悟。回顾下个人的爬虫经历,共分三个阶段:第一阶段,09年左右开始接触爬虫,那时由于项目需要,要访问各大国际社交网站,Facebook,myspace,filcker,youtube等等,国际上叫得上名字的社交网站都爬过,大部分网站提供restful api,有些功能没有api,就只能用http抓包工具分析协议,自己爬;国内的优酷、

Golang网络爬虫框架gocolly/colly(三)

熟悉了《Golang 网络爬虫框架gocolly/colly 一》和《Golang 网络爬虫框架gocolly/colly 二》之后就可以在网络上爬取大部分数据了。本文接下来将爬取中证指数有限公司提供的行业市盈率。(http://www.csindex.com.cn/zh-CN/downloads/industry-price-earnings-ratio) 定义数据结构体: type Zhj

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

urllib与requests爬虫简介

urllib与requests爬虫简介 – 潘登同学的爬虫笔记 文章目录 urllib与requests爬虫简介 -- 潘登同学的爬虫笔记第一个爬虫程序 urllib的基本使用Request对象的使用urllib发送get请求实战-喜马拉雅网站 urllib发送post请求 动态页面获取数据请求 SSL证书验证伪装自己的爬虫-请求头 urllib的底层原理伪装自己的爬虫-设置代理爬虫coo

Python 爬虫入门 - 基础数据采集

Python网络爬虫是一种强大且灵活的工具,用于从互联网上自动化地获取和处理数据。无论你是数据科学家、市场分析师,还是一个想要深入了解互联网数据的开发者,掌握网络爬虫技术都将为你打开一扇通向丰富数据资源的大门。 在本教程中,我们将从基本概念入手,逐步深入了解如何构建和优化网络爬虫,涵盖从发送请求、解析网页结构到保存数据的全过程,并讨论如何应对常见的反爬虫机制。通过本教程,你将能够构建有效的网络爬

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功能数据来源示例使用目的搜索引擎优化 (SEO)分析关键词密度、外部链接质量等网站元数据、链接提升网站在搜索引擎中的排名市场研究收集竞品信息、价格比较电商网站、行业报告制定更有效的市场策略舆情

0基础学习爬虫系列:程序打包部署

1.目标 将已经写好的python代码,打包独立部署或运营。 2. 环境准备 1)通义千问 :https://tongyi.aliyun.com/qianwen 2)0基础学习爬虫系列–网页内容爬取:https://blog.csdn.net/qq_36918149/article/details/141998185?spm=1001.2014.3001.5502 3. 步骤 1)不知道