使用python爬取B站彈幕和三連


寫在前面

今天和朋友嘮嗑,說着說着說到了爬取B站彈幕和三連的事情。於是就想着用python來試試爬取B站的彈幕和三連了

代碼

不廢話了,先上代碼:

# 爬取B站彈幕
import requests
import time
import json
from lxml import etree
# 放入要爬的url
# 彈幕api
url_b = "https://api.bilibili.com/x/v1/dm/list.so?oid=186339235"
# 三連api
url_state = "https://api.bilibili.com/x/web-interface/archive/stat?aid=925611776"
# 設置header
header = {"user-agent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) "
                        + "AppleWebKit/537.36 (KHTML, like Gecko)"
                        + " Chrome/80.0.3987.116 Mobile Safari/537.36"}
# 獲取信息
try:
    # 延時操作,防止爬的太快
    time.sleep(0.5)
    response = requests.get(url_b, headers=header)
except Exception as e:
    print(e)
else:
    if response.status_code == 200:
        # 下載xml文件
        with open("bilibili.xml", 'wb') as f:
            f.write(response.content)
# 解析網頁
time.sleep(1)
# 文件路徑,html解析器
html = etree.parse('bilibili.xml', etree.HTMLParser())
# xpath解析,獲取當前所有的d標簽
results = html.xpath('//d//text()')
i = 0
sum_self = 0
for result in results:
    sum_self = sum_self + 1
    if result.find("飛"):
        i = i+1
print("總數為: %d 包含飛字的彈幕為:%d" % (sum_self, i))
data_get = requests.get(url_state, headers=header)
data_san = json.loads(data_get.content.decode())
print("硬幣為:%d" % data_san['data']['coin'])
print("轉發為: %d" % data_san['data']['share'])
print("點贊為:%d" % data_san['data']['like'])

這里關於找api的操作,可以自行用火狐或者谷歌的開發者模式去尋找。
在這里由於B站的彈幕是用xml存的,且最大彈幕量是1000,即只爬了一千條彈幕。

思路分析

首先找一個B站視頻,然后尋找彈幕和三連的API:

首先發現了這個,閱讀英文后發現明顯就是三連的英文。
就是簡單的json格式,關於json格式的處理已經練習過嘞
然后找彈幕,發現是xml文件:


觀察結構可以發現彈幕都是在d標簽里的。上次爬取論文的時候也用了類似的操作,我們直接讀取d標簽的內容即可。
這里我們就用xpath來很方便的找到。關於xpath的語法等有空再開個博客寫一寫。

結果


可以看到爬取B站彈幕和三連非常方便,也體會到了python在某些領域的優勢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM