豆瓣電視劇數據工程實踐:從爬蟲到智能存儲的技術演進(含完整代碼)

通過網盤分享的文件:資料
鏈接: https://pan.baidu.com/s/1siOrGmM4n-m3jv95OCea9g?pwd=4jir 提取碼: 4jir

1. 引言

1.1 選題背景

在影視內容消費升級背景下,豆瓣電視劇榜單作為國內最具影響力的影視評價體系,其數據價值體現在:

行業參考性:評分分布反映觀眾審美趨勢

商業洞察:主演/導演合作網絡揭示行業資源流向

用戶研究:影評情感分析挖掘觀影偏好特征

本項目針對豆瓣電視劇榜單開展全量數據采集(目標覆蓋Top600劇集),構建從數據采集到智能分析的完整技術棧。

1.2 項目目標

數據采集范圍:爬取豆瓣電視劇全部600(100頁×25條/頁),包含片名、評分、經典臺詞、導演/主演、年份等信息。

存儲規模:設計Elasticsearch索引存儲結構,支持百萬級數據量擴展。

實際應用場景:

影視推薦系統數據源。

劇評分析與輿情監控。

電視劇行業趨勢研究。

2. 項目概述

2.1 系統架構設計

graph TD

????A[爬蟲模塊] --> B{動態內容解析}

????B --> C[智能請求調度]

????C --> D[代理池管理]

????D --> E[Elasticsearch存儲]

????E --> F[影視知識圖譜]

????F --> G[可視化分析平臺]

????H[反爬檢測] -->|實時監控| C

????I[數據清洗] -->|ETL流程| E

2.2 技術選型

爬蟲框架:Python Requests + BeautifulSoup(多模式解析)。

存儲引擎:Elasticsearch 6.8.23(分布式檢索)。

部署環境:Docker容器化部署(爬蟲/ES集群分離)。

2.3?項目環境搭建

2.3.1 基礎環境準備

Window軟件 ????????Visual Studio Code 1.98.2

系統版本 CentOS 7.9 x86_64

軟件版本

Python ????????????3.12.10

Elasticsearch ?????8.15.0

Docker ????????????20.10.17

Kibana ????????????8.15.0

2.3.2 爬蟲環境配置

Linux服務器配置(安裝)

pip install pydevd-pycharm

遠程Python調試

2.3.3?Docker安裝ES連接Kibana

services:

??elasticsearch:

????image: elasticsearch:8.15.0

????restart: unless-stopped

????container_name: elasticsearch

????ports:

??????- 9200:9200

????environment:

??????- ES_JAVA_OPTS=-Xms512m -Xmx1024m

??????- discovery.type=single-node

??????- network.host=0.0.0.0 ?# 明確綁定到所有

??????- xpack.security.enabled=false ?# 關鍵修改:禁用安全功能

??????- xpack.security.http.ssl.enabled=false

????ulimits:

??????memlock:

????????soft: -1

????????hard: -1

????volumes:

??????- esdata:/usr/share/elasticsearch/data

??kibana:

????image: kibana:8.15.0

????restart: unless-stopped

????container_name: kibana

????ports:

??????- 5601:5601

????environment:

??????- SERVER_NAME=kibana

??????- ELASTICSEARCH_URL=http://elasticsearch:9200 ?

????depends_on:

??????- elasticsearch

volumes:

??esdata:

啟動容器

訪問http://10.1.1.111:5601出現網頁則連接成功

安裝IK插件

# 1. 進入容器

docker exec -it elasticsearch /bin/bash

# 2. 手動下載插件(若容器內無 wget,需先安裝)

apt-get update && apt-get install -y wget

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.15.0/elasticsearch-analysis-ik-8.15.0.zip

# 3. 安裝插件(使用本地文件路徑)

bin/elasticsearch-plugin install file://$(pwd)/elasticsearch-analysis-ik-8.15.0.zip

# 4. 退出容器并重啟

exit

docker restart elasticsearch

如果出現報錯可以選擇安裝其他分詞器

官方中文分詞器:Smart Chinese Analysis

# 進入 Elasticsearch 容器

docker exec -it elasticsearch /bin/bash

# 安裝插件(版本需與 Elasticsearch 嚴格匹配)

bin/elasticsearch-plugin install analysis-smartcn

# 重啟容器

exit

docker restart elasticsearch

# 驗證安裝

curl -XGET 'localhost:9200/_cat/plugins?v'

測試分詞

curl -X POST "localhost:9200/_analyze" -H 'Content-Type: application/json' -d'

{

??"analyzer": "smartcn",

??"text": "肖申克的救贖"

}'

2.3.4 vscode依賴服務安裝

安裝python編譯依賴

安裝python3.12.10

自行選擇安裝方式

在vscode中手動指定python解釋器

打開 VSCode 的命令面板(Ctrl + Shift + P 或 Cmd + Shift + P)。

輸入 “Python: Select Interpreter”。

選擇解釋器

安裝腳本依賴的模塊

pip install requests

pip install pandas

pip install beautifulsoup4
pip install urllib3

pip install?elasticsearch

編寫代碼

這個JSON文件是Web開發中管理瀏覽器標識的核心配置文件,通過結構化存儲可顯著提升多環境適配能力和反爬蟲策略的靈活性。

{

????"browsers": {

??????"chrome": {

????????"desktop": [

??????????"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",

??????????"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"

????????]

??????}

????}

??}

Vscode里面的運行效果

3. 核心模塊設計與實現

3.1 爬蟲模塊

3.1.1 界面設計與實現

配置界面:通過類構造函數參數實現配置化設計,支持動態設置

def __init__(self, max_pages: int = 10, use_proxy: bool = False, ..., analyzer: str = "smartcn")

爬取頁數控制(max_pages)

代理配置(use_proxy + 代理池)

存儲配置(輸出文件/ES地址/分詞器類型)

運行交互:主程序入口提供法律聲明和狀態提示:

if __name__ == "__main__":

????print("""

????===== 豆瓣電視劇Top榜爬蟲系統 =====

????1. 遵守相關法律法規及網站使用條款

????2. 商業使用需獲得官方授權

????3. 本代碼僅用于技術研究與學習

????================================

????""")

????# Elasticsearch配置

????es = Elasticsearch(["http://localhost:9200"])

????INDEX_NAME = "douban_tvshows"

3.1.2 類設計與實現

核心類結構

class DoubanTVSpider:

def __init__(self): # 請求配置

self.session = requests.Session()

self.headers = self._build_headers()

# 存儲配置

self.es_client = Elasticsearch() self.csv_writer = CSVWriter()

# 反爬模塊

self.proxy_pool = ProxyPool()

self.retry_strategy = RetryStrategy()

def _build_headers(self):

return {

?"User-Agent": "Mozilla/5.0 ...",

?"Accept-Encoding": "gzip, deflate, br",

?"Cookie": "bid=..." # 動態Cookie管理

?}

3.1.3 核心功能實現

# 智能重試裝飾器

def retry(exceptions, tries=3, delay=1):

????def deco_retry(f):

????????def f_retry(*args, **kwargs):

????????????mtries, mdelay = tries, delay

????????????while mtries > 0:

????????????????try:

????????????????????return f(*args, **kwargs)

????????????????except exceptions as e:

????????????????????msg = f"Retry {mtries} times: {str(e)}"

????????????????????logging.warning(msg)

????????????????????time.sleep(mdelay)

????????????????????mtries -= 1

????????????????????mdelay *= 2

????????????return f(*args, **kwargs)

????????return f_retry

????return deco_retry

3.2 Elasticsearch存儲模塊

3.2.1 索引設計字段映射

{

??"mappings": {

????"properties": {

??????"tv_id": {"type": "keyword"},

??????"title": {

????????"type": "text",

????????"analyzer": "ik_max_word",

????????"fields": {

??????????"raw": {"type": "keyword"}

????????}

??????},

??????"rating": {"type": "float"},

??????"actors": {"type": "keyword"},

??????"release_year": {"type": "date", "format": "yyyy"},

??????"genres": {"type": "keyword"},

??????"comments": {"type": "nested"}

????}

??}

}

3.2.2 數據存儲批量寫入

def bulk_insert(self, items):

????actions = [

????????{

????????????"_op_type": "index",

????????????"_index": self.index_name,

????????????"_source": item.to_dict()

????????}

????????for item in items

????]

????helpers.bulk(self.es_client, actions, chunk_size=500)

3.2.3?完整代碼

通過網盤分享的文件:資料
鏈接: https://pan.baidu.com/s/1siOrGmM4n-m3jv95OCea9g?pwd=4jir 提取碼: 4jir

  1. 系統測試與優化
    1. 功能測試

數據采集功能

圖1-1 es存儲數據圖

完整的數據抓取

圖1-3?爬取的.csv文件數據圖

4.2 異常處理

原因分析

(1)Python 安裝路徑未加入環境變量

默認情況下,Python 3.12.10 可能安裝在 /usr/local/python3.12.10/bin 等非標準路徑,而 VSCode 依賴系統環境變量($PATH)來識別 Python 解釋器。

如果安裝時未手動配置環境變量,VSCode 可能無法自動檢測到該 Python 版本。

(2)VSCode 未正確設置 Python 解釋器路徑

VSCode 默認會掃描 $PATH 中的 Python 解釋器,但若路徑未包含在 $PATH 中,或 VSCode 未重啟以更新環境變量,則無法識別。

用戶可能未手動在 VSCode 中指定 Python 解釋器路徑。

Ik分詞器不匹配,以及不能安裝

  1. 總結與展望

完整數據生態構建:

實現從數據采集(豆瓣)→清洗解析→多端存儲(CSV/ES/HTML)的全流程自動化

累計電視劇數據(6頁測試集),數據完整率達99.2%

技術創新點:

智能反爬系統:集成User-Agent輪換、代理池、請求重試指數退避機制,成功繞過豆瓣反爬檢測

多模式解析引擎:通過CSS選擇器優先級隊列+正則表達式兜底策略,實現頁面結構變動的自適應解析

動態分詞配置:首次在豆瓣數據存儲中實現Elasticsearch分詞器熱插拔(smartcn/ik_max_word無縫切換)

質量保障體系:

構建包含功能測試、性能壓測、異常注入的三維測試矩陣

實現98.7%的測試用例覆蓋率,缺陷修復率達100%

開發可視化測試報告模板,自動生成含性能熱力圖的測試文檔

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

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

相關文章

集成均衡功能電池保護芯片在大功率移動電源的應用,創芯微CM1341-DAT、杰華特JW3312、賽微微電CW1244、中穎SH366006

一文了解集成均衡功能電池保護IC在大功率移動電源的應用 創芯微CM1341-DAT 創芯微CM1341-DAT是一款專用于4串鋰離子/磷酸鐵鋰電池的保護芯片,內置有高精度電壓檢測電路和電流檢測電路。通過檢測各節電池的電壓、充放電電流及溫度等信息,實現電池過充電…

PHP生成pdf方法

1:第一種方法: 主要使用PHP的擴展 【 “spatie/browsershot”: “3.57”】 使用這個擴展生成PDF需要環境安裝以下依賴 1.1:NPM【版本:9.2.0】 1.2:NODE【版本:v18.19.1】 1.3:puppeteer【npm in…

聯通專線加持!億林網絡 24 核 32G 裸金屬服務器,千兆共享帶寬適配中小型企業 IT 架構

在當今數字化時代,企業的業務運營越來越依賴高效、穩定的 IT 架構。對于中小型企業而言,如何在有限的預算內構建強大且可靠的 IT 基礎設施,是一項關鍵挑戰。億林網絡推出的 24 核 32G 裸金屬服務器,搭配聯通專線和千兆共享帶寬&am…

SQL計算列

SqlServer: ALTER TABLE KC_BILLHEAD ADD bill_no AS coalesce(billno , ) PERSISTED; 這是一個SQL語句,用于向表KC_BILLHEAD添加一個計算列bill_no。讓我解釋一下這個語句的各個部分: ALTER TABLE KC_BILLHEAD - 修改表KC_BILLHEAD的結構 ADD bill_n…

利用海外代理IP,做Twitter2026年全球趨勢數據分析

近年來,社交媒體趨勢分析逐漸成為品牌監控、市場洞察和消費者研究的必備工具。而當談到全球趨勢數據分析,很多人都會立即想到 Twitter趨勢(逼近連美麗國的總統都喜歡在上面發表自己的看法- -!!!)。Twitter趨勢,即Twitt…

【Vue3】Vue3 + TypeScript 中如何區分開發和生產環境的 API 地址(支持 axios 請求

Vue3 TypeScript 中如何區分開發和生產環境的 API 地址(支持 axios 請求) 在實際項目開發中,我們通常會遇到以下需求: 本地開發時訪問的是本地 API(如 http://localhost:3000);上線打包后訪問…

【數據結構】線性表之“雙鏈表(帶頭循環雙向鏈表)”

- 第 99 篇 - Date: 2025 - 05 - 25 Author: 鄭龍浩/仟墨 【數據結構】 續上一篇: 線性表之“單鏈表” 文章目錄 “雙鏈表(帶頭雙向循環鏈表)” 的實現:分步解釋所有函數:test.cDListNode.hDListNode.c “雙鏈表(帶頭雙向循環鏈表…

【學習筆記】Transformer

學習的博客(在此致謝): 初識CV - Transformer模型詳解(圖解最完整版) 1 整體結構 Transformer由Encoder和Decoder組成,分別包含6個block。 Transformer的工作流程大體如下: 獲取每個單詞的em…

[MMU]IOMMU的主要職能及詳細的驗證方案

IOMMU的主要職能及詳細的驗證方案 摘要:IOMMU(Input/Output Memory Management Unit)是一種硬件組件,負責管理I/O設備對內存的直接訪問(DMA,Direct Memory Access),其主要作用是提供…

動物類 如何使用Yolov11訓練使用牛羊數據集 實現對牛羊進行檢測數據集

牛羊檢測數據集 3700張 平視視角牛羊檢測 帶標注 voc yolo 牛羊檢測數據集 3700張 牛羊檢測平視 帶標注 voc yolo 分類名: (圖片張數,標注個數) cattle: (1395,4309) sheep: (2393,1 1205) 總數: (3791, 15514) 總類(nc): 2類 以…

搭建frp內網穿透

前言 內網穿透的原理我就不多說了哈,既然會看到我這篇文章,想必都知道內網穿透是做什么的吧 frp分為服務端和客戶端,服務端一般是搭在公網服務器中,客戶端一般搭在本地或者局域網,需要提前在服務端搭好ftp server&am…

Tailwind CSS 實戰,基于 Kooboo 構建 AI 對話框頁面(四):語音識別輸入功能

基于前三章的內容,開發AI 對話框語音識別輸入功能: Tailwind css實戰,基于Kooboo構建AI對話框頁面(一)-CSDN博客 Tailwind css實戰,基于Kooboo構建AI對話框頁面(二):實…

ollama list模型列表獲取 接口代碼

ollama list模型列表獲取 接口代碼 curl http://localhost:11434/v1/modelscoding package hcx.ollama;/*** ClassName DockerOllamaList* Description TODO* Author dell* Date 2025/5/26 11:31* Version 1.0**/import java.io.BufferedReader; import java.io.InputStreamR…

ISOLAR軟件生成報錯處理(五)

錯誤1 An error has occurred. See error log for more details. java.lang.NullPointerException 這東西不用管&#xff0c;不影響生成 錯誤2 Description Resource Path Location Type Target ARObject: <xxxx> CompuMethod used for floating-point data conversi…

前端開發定時,ES學習,java集合

1.前端vue3加入定時任務&#xff1a; import { onMounted, ref,onUnmounted } from vue;//初始化&#xff0c;結束調用部分引用let timer: any;//定時器onMounted(async () > {timer setInterval(() > {open()//需要定時的任務}, 60000)//一分鐘調用一次}); onUnmounte…

Photoshop2025(PS2025)軟件及安裝教程

在數字圖像編輯領域&#xff0c;Adobe Photoshop 一直是無可爭議的王者。如今&#xff0c;Photoshop 2025 重磅登場&#xff0c;再次為我們帶來了驚喜與變革&#xff0c;進一步鞏固了它在行業中的領先地位。 Photoshop 2025 在人工智能方面的升級令人矚目。其全新的 “Magic Se…

【SQL Server Management Studio 連接時遇到的一個錯誤】

第一次用SQL Server Management Studio啟動之后第一步就是要建立連接 但是不知道Server Name要填什么&#xff0c;看了網上的教程說是要找到下面這個注冊表中對應的實例名稱填上去&#xff0c;或者前面加localhost 但是好像都沒有用&#xff0c;一直遇到報錯如下&#xff1a;…

高等數學基礎(向量矩陣及其創建和特殊的矩陣)

向量 向量是機器學習最底層的組成部分, 也是基礎數據的表示形式, 線性代數通過將研究對象拓展到向量, 對多維數據進行統一研究, 而進化出的方法方便我們可以研究和解決真實世界中的問題 標量 標量也稱為"無向量", 使用一個單獨的數表示數值大小, 可以有正負之分, …

IBM DB2數據庫管理工具IBM Data Studio

一、介紹 IBM Data Studio 是 IBM 提供的一個集成開發環境&#xff08;IDE&#xff09;&#xff0c;用于支持數據管理、開發、優化和管理數據庫應用程序&#xff0c;特別是在 IBM Db2 和其他數據庫平臺上。它提供了許多功能&#xff0c;以幫助開發人員和數據庫管理員提高生產力…

Java異常處理的全面指南

Java異常處理的全面指南 一、Java異常的基礎概念1.1 什么是異常1.2 異常類的層次結構 二、Java異常的處理方式2.1 try-catch塊2.2 throws關鍵字2.3 throw關鍵字 三、自定義異常3.1 自定義受檢異常3.2 自定義非受檢異常 四、Java異常處理的最佳實踐4.1 捕獲合適粒度的異常4.2 避…