抖音與B站爬蟲實戰,獲取核心數據

本文將深入講解兩大主流短視頻平臺(抖音、B站)的爬蟲實戰技術,提供可直接運行的代碼解決方案,并分享突破反爬機制的核心技巧。


一、平臺特性與爬蟲難點對比

平臺數據價值主要反爬措施推薦抓取方式
抖音視頻數據、用戶畫像、熱榜簽名驗證、TLS指紋、滑塊驗證Web接口+簽名破解
B站彈幕、評論、視頻元數據Referer校驗、Cookie驗證、頻率限制API接口+模擬登錄

二、抖音爬蟲實戰:獲取用戶視頻數據

核心原理:破解X-Bogus簽名

抖音通過X-Bogus參數保護接口,需使用JavaScript逆向技術生成簽名。

python

import requests
import execjs  # 執行JS代碼
import json# 加載本地JS簽名生成腳本(需提前保存)
with open('douyin_xbogus.js', 'r') as f:js_code = f.read()
ctx = execjs.compile(js_code)def get_douyin_user_videos(user_id):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Cookie': '你的抖音Cookie'  # 通過瀏覽器獲取}# 構造原始URLbase_url = f"https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&user_id={user_id}"# 通過JS生成X-Bogus簽名xbogus = ctx.call('generateXbogus', base_url)signed_url = base_url + "&X-Bogus=" + xbogustry:response = requests.get(signed_url, headers=headers)data = response.json()# 解析視頻數據videos = []for aweme in data['aweme_list']:video_info = {'id': aweme['aweme_id'],'desc': aweme['desc'],'create_time': aweme['create_time'],'duration': aweme['duration'] // 1000,  # 轉為秒'likes': aweme['statistics']['digg_count'],'comments': aweme['statistics']['comment_count'],'url': aweme['video']['play_addr']['url_list'][0]}videos.append(video_info)return videosexcept Exception as e:print(f"抓取失敗: {str(e)}")return []# 使用示例
if __name__ == "__main__":user_id = "123456789"  # 替換為目標用戶IDvideo_data = get_douyin_user_videos(user_id)print(f"獲取到{len(video_data)}個視頻")for video in video_data[:3]:print(video['desc'])
關鍵技術點:
  1. X-Bogus簽名生成

    • 需要逆向抖音官方JavaScript生成算法

    • 使用PyExecJS執行JS代碼生成有效簽名

  2. 關鍵參數獲取

    • user_id:通過分享鏈接獲取(需URL解碼)

    • Cookie:登錄后從瀏覽器開發者工具獲取

  3. 數據解析技巧

    • 視頻真實地址在play_addr.url_list

    • 時間戳需要轉換格式

注:完整X-Bogus生成JS代碼需單獨獲取(因篇幅限制未展示)


三、B站爬蟲實戰:獲取視頻彈幕與評論

方案1:直接獲取彈幕數據(無需登錄)

python

import requests
import re
import xml.etree.ElementTree as ETdef get_bilibili_danmaku(cid):""" 通過視頻CID獲取彈幕 """url = f"https://api.bilibili.com/x/v1/dm/list.so?oid={cid}"response = requests.get(url)response.encoding = 'utf-8'# 解析XML彈幕數據danmaku = []root = ET.fromstring(response.text)for d in root.findall('d'):attrs = d.attrib['p'].split(',')danmaku.append({'time': float(attrs[0]),'type': int(attrs[1]),'size': int(attrs[2]),'color': f"#{int(attrs[3]):06X}",'timestamp': int(attrs[4]),'text': d.text})return danmaku# 使用示例
cid = "45678901"  # 通過視頻API獲取
danmaku_data = get_bilibili_danmaku(cid)
print(f"獲取到{len(danmaku_data)}條彈幕")
方案2:獲取視頻評論(需模擬登錄)

python

import requests
import time
import randomdef get_bilibili_comments(bvid):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36','Referer': f'https://www.bilibili.com/video/{bvid}','Cookie': '你的B站Cookie'}comments = []page = 1while True:url = f"https://api.bilibili.com/x/v2/reply?jsonp=jsonp&pn={page}&type=1&oid={get_aid(bvid)}&sort=2"try:response = requests.get(url, headers=headers)data = response.json()if data['code'] != 0:print(f"錯誤: {data['message']}")break# 解析評論數據for reply in data['data']['replies']:comments.append({'user': reply['member']['uname'],'content': reply['content']['message'],'like': reply['like'],'time': time.strftime("%Y-%m-%d %H:%M", time.localtime(reply['ctime']))})print(f"已獲取第{page}頁評論")page += 1# 隨機延遲防止封禁time.sleep(random.uniform(1.5, 3))# 檢查是否還有下一頁if page > data['data']['page']['count'] // 20:breakexcept Exception as e:print(f"抓取出錯: {str(e)}")breakreturn commentsdef get_aid(bvid):""" 將BV號轉換為AV號 """table = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF'tr = {table[i]: i for i in range(58)}s = [11, 10, 3, 8, 4, 6]xor = 177451812add = 8728348608r = 0for i in range(6):r += tr[bvid[s[i]]] * 58 ** ireturn (r - add) ^ xor# 使用示例
if __name__ == "__main__":bvid = "BV1gK4y1N7Jb"  # 替換為目標視頻BV號comment_data = get_bilibili_comments(bvid)print(f"獲取到{len(comment_data)}條評論")
關鍵技術點:
  1. CID/AID獲取

    • 彈幕需要CID參數(通過視頻API獲取)

    • 評論需要AID(BV號需轉換為AV號)

  2. 反爬突破技巧

    • 必須攜帶Referer請求頭

    • Cookie需定期更新(有效期約1天)

    • 請求間隔需隨機化(1-3秒)

  3. 數據解析

    • 彈幕為XML格式,屬性包含位置/顏色/時間

    • 評論API返回分頁JSON數據


四、高級反爬對抗方案

反爬類型解決方案工具推薦
簽名驗證JavaScript逆向PyExecJS/Frida
TLS指紋修改客戶端指紋curl_cffi/requests_toolbelt
滑塊驗證打碼平臺/OCR識別ddddocr/第三方打碼API
IP限制代理IP輪換快代理/站大爺

代理IP示例代碼

python

from itertools import cycleproxies = cycle(['http://user:pass@192.168.1.1:8080','http://user:pass@192.168.1.2:8080'
])def make_request(url):proxy = next(proxies)try:return requests.get(url, proxies={"http": proxy}, timeout=10)except:return make_request(url)  # 自動切換下一個代理

五、法律合規邊界

  1. 允許操作

    • 抓取公開視頻信息(非隱私內容)

    • 個人學習研究目的

    • 遵守robots.txt限制

  2. 禁止行為

    • 破解付費內容

    • 抓取用戶私信/手機號等隱私

    • 商業用途未經授權

    • 高頻請求影響服務(>1次/秒)

建議:商業項目使用官方API(抖音開放平臺/B站開放接口),個人學習控制請求頻率


六、最佳實踐建議

  1. 數據存儲優化

    • 使用消息隊列(RabbitMQ)緩沖請求

    • 分布式存儲(MongoDB分片集群)

  2. 錯誤處理機制

    python

    # 重試裝飾器示例
    from tenacity import retry, stop_after_attempt, wait_random@retry(stop=stop_after_attempt(3), wait=wait_random(min=2, max=5))
    def safe_request(url):response = requests.get(url)response.raise_for_status()return response
  3. 監控體系

    • 成功率監控(Prometheus)

    • 代理IP可用性檢測

    • 自動切換簽名算法版本

通過本指南,你可快速構建抖音/B站數據采集系統。隨著平臺反爬策略升級,需要持續關注接口變化并更新破解方案。建議優先考慮官方API方案,復雜場景可結合Selenium模擬真人操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/90684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/90684.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/90684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WSL切換網絡模式

WSL切換網絡模式問題WSL從NAT改成MIRRORED找到WSL Setting修改配置重啟電腦(注意不是重啟WSL)運行pio run驗證IP問題 從魚香ROS買了一個小魚車,開始學習,然而裝環境都要搞死我了。 垃圾VirtualBox我新買的電腦,裝個Vi…

[Linux入門] Linux 遠程訪問及控制全解析:從入門到實戰

目錄 一、SSH 遠程管理:為什么它是遠程訪問的首選? 1??什么是 SSH? 2??SSH 為什么比傳統工具更安全? 3??SSH 的 “三大組成部分” 4??SSH 工作的 “五步流程” 5??常用 SSH 工具 二、實戰:構建 SSH 遠…

n8n AI資訊聚合與分發自動化教程:從數據獲取到微信與Notion集成

引言 n8n簡介:自動化工作流利器 n8n是一款功能強大的開源自動化工具,采用獨特的“公平代碼”(Fair-Code)許可模式,旨在幫助用戶連接各種應用程序和服務,從而實現工作流的自動化。它通過直觀的可視化界面&am…

遞歸查詢美國加速-技術演進與行業應用深度解析

在當今數據驅動的時代,遞歸查詢已成為處理層級數據的核心技術,尤其在美國科技領域獲得廣泛應用。本文將深入解析遞歸查詢在美國加速發展的關鍵因素,包括技術演進、行業應用場景以及性能優化策略,幫助讀者全面理解這一重要技術趨勢…

【AIGC專欄】WebUI實現圖片的縮放

圖片的縮放包含如下的各類不同的縮放模型。 Lanczos Lanczos重采樣是一種數學上精確的方法,用于圖像放大或縮小。它使用了一種稱為 sinc 函數的數學公式,可以在保留圖像細節的同時減少鋸齒效應。 Nearest 最近鄰插值是一種簡單的圖像放大方法,通過復制最近的像素值來填充新…

Libevent(4)之使用教程(3)配置

Libevent(4)之使用教程(3)配置事件 Author: Once Day Date: 2025年7月27日 一位熱衷于Linux學習和開發的菜鳥,試圖譜寫一場冒險之旅,也許終點只是一場白日夢… 漫漫長路,有人對你微笑過嘛… 本文檔翻譯于:Fast portable non-bl…

若依前后端分離版學習筆記(三)——表結構介紹

前言: 這一節將ruoyi框架中數據庫中的表結構過一遍,查看都有哪些表及其表結構及關聯關系,為后續代碼學習做準備。 一 代碼生成表記錄代碼生成的業務表及相關字段1 代碼生成業務表 CREATE TABLE gen_table (table_id bigint(20) NOT NULL AUTO…

NFS服務安裝與使用

概述 內網需要使用NFS服務掛載到其他服務器,用做數據備份使用。 安裝 # Centos yum install -y nfs-utils # Ubuntu apt install nfs-common配置 # 編輯 vim /etc/exports # 輸入內容 /public/KOL-ESbackup 172.29.1.0/24 192.168.8.63 192.168.8.64 192.168.8.65(r…

使用adb 發送廣播 動態改變app內的值

前言 在開發過程中有時候我們需要做一些調試工作。可以通過adb發送廣播實現。 廣播注冊 注意最后一個參數,Context.RECEIVER_EXPORTED 這是Android 34以后強制要求的,方便外部發送這個廣播。否則會報錯val filter IntentFilter()filter.addAction("…

【Web安全】邏輯漏洞之URL跳轉漏洞:原理、場景與防御

文章目錄前言一、漏洞本質二、攻擊原理正常跳轉流程漏洞觸發流程三、抓包的關鍵時機:跳轉參數生成時四、風險場景1.登錄/注冊后跳轉2.退出登錄跳轉3.分享/廣告鏈接跳轉4.密碼重置鏈接跳轉五、漏洞挖掘:怎么找到這種漏洞?1.找到跳轉參數2.篡改…

新手開發 App,容易陷入哪些誤區?

新手開發 App 時,常因對流程和用戶需求理解不足陷入誤區,不僅拖慢進度,還可能導致產品無人問津。?功能堆砌是最常見的陷阱。不少新手總想 “一步到位”,在初期版本就加入十幾項功能,比如做社區團購 App 時&#xff0c…

Linux學習篇11——Linux軟件包管理利器:RPM與YUM詳解與實戰指南,包含如何配置失效的YUM鏡像地址

引言 本文主要梳理 Linux 系統中的軟件包的概念,同時介紹RPM與YUM兩大核心管理工具的常用指令、區別聯系以及實戰技巧等。本文作為作者學習Linux系統的第11篇文章,依舊旨在總結當前的學習內容,同時鞏固知識以便日后的學習復習回顧。如有說的…

Vue3+ElementPlus實現可拖拽/吸附/搜索/收起展開的浮動菜單組件

在開發后臺管理系統時,我們經常會用到浮動菜單來快速訪問某些功能。本篇文章將分享一個基于 Vue3 ElementPlus 實現的浮動菜單組件,支持拖拽移動、邊緣吸附、二級菜單展開、菜單搜索過濾、視頻彈窗等交互效果,極大提升了用戶操作的便捷性與美…

CSS 盒子模型學習版的理解

文章目錄一、盒子模型構建流程(一句話抓關鍵)二、核心邏輯提煉三、代碼驗證四、一句話總結流程通過手繪圖示,清晰拆解 Content(內容)→ Padding(內邊距)→ Border(邊框)→…

解決線程安全的幾個方法

線程安全:線程安全問題的發現與解決-CSDN博客 Java中所使用的并發機制依賴于JVM的實現和CPU的指令。 所以了解并掌握深入Java并發編程基礎的前提知識是熟悉JVM的實現了解CPU的指令。 1.volatile簡介 在多線程并發編程中,有兩個重要的關鍵字&#xff1a…

大模型應用班-第2課 DeepSeek使用與提示詞工程課程重點 學習ollama 安裝 用deepseek-r1:1.5b 分析PDF 內容

DeepSeek使用與提示詞工程課程重點Homework:ollama 安裝 用deepseek-r1:1.5b 分析PDF 內容python 代碼建構:1.小模型 1.5b 可以在 筆記本上快速執行2.分析結果還不錯3. 重點是提示詞 prompt 的寫法一、DeepSeek模型創新與特點1. DeepSeek-V3模型特點采用…

在FreeBSD系統下使用llama-cpp運行飛槳開源大模型Ernie4.5 0.3B(失敗)

先上結論,截止到目前2025.7.25日,還不能用。也就是Ernie4.5模型無法在llama.cpp 和Ollama上進行推理,原因主要就llama是不支持Ernie4.5異構MoE架構。 不局限于FreeBSD系統,Windows也測試失敗,理論上Ubuntu下也是不行。…

OpenCV圖像梯度、邊緣檢測、輪廓繪制、凸包檢測大合集

一、圖像梯度 在圖像處理中,「梯度(Gradient)」是一個非常基礎但又極其重要的概念。它是圖像邊緣檢測、特征提取、紋理分析等眾多任務的核心。梯度的本質是在空間上描述像素灰度值變化的快慢和方向。 但我們如何在圖像中計算梯度?…

GitHub 趨勢日報 (2025年07月25日)

📊 由 TrendForge 系統生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日獲星趨勢圖 今日獲星趨勢圖1814Resume-Matcher985neko714Qwen3-Coder622OpenBB542BillionMail486hrms219hyper…

編程語言Java——核心技術篇(五)IO流:數據洪流中的航道設計

🌟 你好,我是 勵志成為糕手 ! 🌌 在代碼的宇宙中,我是那個追逐優雅與性能的星際旅人。 ? 每一行代碼都是我種下的星光,在邏輯的土壤里生長成璀璨的銀河; 🛠? 每一個算法都是我繪制…