原理
弹幕获取原理
- b站弹幕是储存在特定的页面上,根据视频的‘cid’可以获取页面位置,所以需要先获取视频的‘cid’,再打开弹幕页面,进而处理。其弹幕储存的页面url格式为: http://comment.bilibili.com/ cid .xml (网站一)
- 那么如何根据BV号来确定cid呢?b站视频的很多数据都储存在某个特定网站,其中BV号就储存在其中其页面url为 https://api.bilibili.com/x/player/pagelist?bvid=(此处为BV号)&jsonp=jsonp (网站二)
- 那么具体操作就很简单了,先打开网站二。从中获得cid,然后根据cid获得弹幕储存页面,之后爬取就可以了
爬虫部分
一个爬虫程序大体是这个样子:
1 | import requests |
其中,爬取页面数据,只是那个requests.post()函数,其他部分都是参数,其中,post是一种请求方式,还有一种,是get,它们两个有很大区别,在我们
写爬虫时,表现为写法不同,详细了解可以去百度一下QAQ。
- url参数,即为目标网址。
- data参数,即为发送的数据内容(可以理解为往目标页面的某个地方输入内容, 或者点击某个部分)
- header参数,这个参数记录了这个数据包是由谁发起,使用什么浏览器的等内容
假如我们用的是Chrome浏览器,我们随便打开一个网址,右键,”检查“,”Network“部分,刷新页面,随便点一个,那就是我们数据包的样子。
我们先手动进行这个操作,那么header部分就是我们手动操作产生的,但是如果我们不做修改,直接用程序发包,那么这个header部分就会不一样,就有可能会被
网站识别,其中最主要部分就是这个’User-Agent’部分。
header部分
User-Agent是一个告诉网页,自己是通过什么方法(比如post,get)来访问的,如果网站发现是非人工来访问的,那么就会禁止,所以需要自己来“伪造”一下。
- 方法一:自己手动上网页中,在“检查”中选中“network”,刷新一下,随便点一个,在“Reequest-Header”中就能找到User-Agent
- 方法二: 直接伪造(目前正在开发)
所以我们手动操作的时候,把User-Agent中的内容复制一下,放到自己设置的参数中
data部分
假如我们想要一个在一个页面中显示搜索某个内容得到的结果(或者点击一些内容),那么就要修改data部分了,那么改如何获取呢?
首先我们在页面的搜索框(假设我们要搜索),搜索的时候打开”检查“部分,还是network部分,点击页面中的搜索时,就会产生很多数据包
点击与搜索相关的数据包(可能需要找一下,可以试着找带有”search“相关的数据包),往下拉,一般在下面有一个”Query String Parameters“
(会根据请求方式时get还是post而发生改变),我们可以根据里面的参数值是否有我们刚才输入的内容来判断。
里面记录的就是 data内容,把它们复制下来粘贴到自己的data参数中即可
后续处理(BeautifulSoup)
我们是把整个页面的html对象爬取下来了,那么我们改如何储存它呢?
这时我们就用到了BeautifulSoup这个库,它能很好地帮助我们去处理爬取的网站页面。(详细内容可以百度搜索或者直接查看它的文档,这里只做简单说明QAQ)
由于爬取的页面返回的是byte形式,且是以utf-8格式编码的,所以我们要把它转化为unicode格式(具体见下面代码,详细可以去百度)
1 | response = requests.get(url = dUrl, headers = myHeaders) |
完整代码:
1 | from bs4 import BeautifulSoup |
- 本文作者: 水蓝络合物
- 本文链接: https://miku39393939.github.io/2021/05/31/BilibiliBarage/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!