完整教學

環境設定

1
2
import requests
import re

愛嗶哩網站

在bilibili隨便一個影片網址的bilibili前加上i可以查到影片的完整資訊呦!
像是這樣:
原影片:
https://www.bilibili.com/video/BV13o4y1S7QD?from=search&seid=9846723565481599460
加上一個i:
https://www.ibilibili.com/video/BV13o4y1S7QD?from=search&seid=9846723565481599460

在愛嗶哩的頁面我們可以看到下方有彈幕的網址 接著我們就可以透過這個頁面抓取囉!!

抓取接口

開啟開發人員工具後,進到微博個人主頁後可以在網路的部分(資料類型請選取XHR)抓到getIndex開頭的接口
(小提示:有時候會抓不到但是如果把網頁換成手機版就可以抓到了~ 還有嘗試過後發現getIndex和getInfo好像都是可以的!)

在抓到後可以在標頭內抓到要求URL

取得URL後就可以開始啦!

完整程式碼

這邊過濾彈幕的時候使用了一個小技巧 即.*? 俗話說:遇事不決點星問 就是這個意思了吧~!
其實我也很好奇到底怎麼解決的 改天有空就來研究一下啦!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
import re

url = 'https://api.bilibili.com/x/v1/dm/list.so?oid=367761750'

headers = {
'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36 Edg/92.0.902.62'
}

response = requests.get(url=url, headers=headers)

#encoding chinese
response.encoding = response.apparent_encoding
#it will keep the word in () into response.text
html_data = re.findall('<d p=".*?">(.*?)</d>', response.text)

#turn the list(response.text's data type) into str so that we can write into txt
content_str = '\n'.join(html_data)

with open('彈幕.txt', mode = 'w', encoding = 'utf-8') as f:
f.write(content_str)

print(html_data)