Python爬取豆瓣電影Top250數(shù)據(jù)并可視化分析
1. 項(xiàng)目概述當(dāng)Python遇上豆瓣電影數(shù)據(jù)電影愛(ài)好者們常常面臨一個(gè)難題面對(duì)豆瓣上浩如煙海的電影信息如何快速找到真正值得觀看的佳作傳統(tǒng)的手動(dòng)篩選方式效率低下且容易遺漏優(yōu)質(zhì)內(nèi)容。這正是Python數(shù)據(jù)可視化技術(shù)大顯身手的場(chǎng)景——通過(guò)自動(dòng)化采集豆瓣電影數(shù)據(jù)并建立可視化分析系統(tǒng)我們能夠直觀地發(fā)現(xiàn)隱藏在數(shù)據(jù)背后的價(jià)值規(guī)律。這個(gè)項(xiàng)目將實(shí)現(xiàn)從數(shù)據(jù)采集到可視化呈現(xiàn)的完整流程。使用Python的Requests庫(kù)抓取豆瓣電影Top250榜單數(shù)據(jù)通過(guò)Pandas進(jìn)行清洗和分析最后借助Matplotlib和Pyecharts構(gòu)建交互式可視化圖表。整個(gè)過(guò)程涉及爬蟲(chóng)技術(shù)、數(shù)據(jù)處理、可視化設(shè)計(jì)等多個(gè)Python核心技能點(diǎn)是數(shù)據(jù)分析入門到進(jìn)階的絕佳練手項(xiàng)目。提示雖然豆瓣數(shù)據(jù)接口對(duì)爬蟲(chóng)有限制但合理設(shè)置請(qǐng)求間隔(建議2-3秒)并添加User-Agent頭部可以避免被屏蔽。我在實(shí)際測(cè)試中發(fā)現(xiàn)單次請(qǐng)求數(shù)據(jù)量控制在20條以內(nèi)最為穩(wěn)妥。2. 數(shù)據(jù)采集方案設(shè)計(jì)與實(shí)現(xiàn)2.1 豆瓣接口分析與請(qǐng)求構(gòu)造豆瓣電影Top250頁(yè)面(https://movie.douban.com/top250)采用經(jīng)典的分頁(yè)加載方式每頁(yè)展示25條記錄。通過(guò)Chrome開(kāi)發(fā)者工具分析網(wǎng)絡(luò)請(qǐng)求可以發(fā)現(xiàn)其數(shù)據(jù)接口具有清晰的URL規(guī)律base_url https://movie.douban.com/top250 params { start: (page_num - 1) * 25, filter: }實(shí)際請(qǐng)求時(shí)需要添加合理的請(qǐng)求頭信息這是我經(jīng)過(guò)多次測(cè)試后總結(jié)出的有效配置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, Accept-Language: zh-CN,zh;q0.9, Referer: https://movie.douban.com/ }2.2 數(shù)據(jù)解析與異常處理使用BeautifulSoup解析HTML時(shí)需要特別注意豆瓣頁(yè)面結(jié)構(gòu)的幾個(gè)特點(diǎn)電影主信息包含在div.item元素中評(píng)分位于span.rating_num標(biāo)簽評(píng)價(jià)人數(shù)需要從div.star span中的文本提取我編寫(xiě)的數(shù)據(jù)提取函數(shù)考慮了各種邊界情況def parse_movie_item(item): try: title item.find(span, class_title).text rating float(item.find(span, class_rating_num).text) eval_num item.find(div, class_star).find_all(span)[-1].text eval_num int(eval_num[:-3]) # 去除人評(píng)價(jià)文字 return { title: title, rating: rating, eval_num: eval_num } except Exception as e: print(f解析異常: {str(e)}) return None注意豆瓣頁(yè)面可能會(huì)進(jìn)行小幅改版建議定期檢查選擇器是否仍然有效。我在2023年6月就遇到過(guò)因?yàn)閏lass名變更導(dǎo)致爬蟲(chóng)失效的情況。3. 數(shù)據(jù)清洗與預(yù)處理技巧3.1 構(gòu)建結(jié)構(gòu)化數(shù)據(jù)表將爬取到的原始數(shù)據(jù)轉(zhuǎn)換為Pandas DataFrame時(shí)有幾個(gè)關(guān)鍵處理步驟import pandas as pd # 創(chuàng)建DataFrame df pd.DataFrame(raw_data) # 處理缺失值 df df.dropna() # 數(shù)據(jù)類型轉(zhuǎn)換 df[rating] df[rating].astype(float) df[eval_num] df[eval_num].astype(int) # 添加排名列 df[rank] range(1, len(df)1)3.2 衍生字段計(jì)算為了后續(xù)分析我們可以計(jì)算一些衍生指標(biāo)# 按評(píng)分分組 df[rating_group] pd.cut(df[rating], bins[0, 7, 8, 9, 10], labels[7分及以下, 7-8分, 8-9分, 9分以上]) # 按評(píng)價(jià)人數(shù)分組 df[popularity] pd.qcut(df[eval_num], q4, labels[冷門, 一般, 熱門, 爆款])4. 可視化分析方案設(shè)計(jì)4.1 基礎(chǔ)統(tǒng)計(jì)圖表使用Matplotlib繪制基礎(chǔ)統(tǒng)計(jì)圖import matplotlib.pyplot as plt plt.figure(figsize(10, 6)) plt.hist(df[rating], bins20, edgecolorblack) plt.title(豆瓣Top250電影評(píng)分分布) plt.xlabel(評(píng)分) plt.ylabel(電影數(shù)量) plt.grid(True, linestyle--, alpha0.5) plt.show()4.2 交互式可視化Pyecharts提供了更豐富的交互功能比如這張?jiān)u分-評(píng)價(jià)人數(shù)氣泡圖from pyecharts import options as opts from pyecharts.charts import Scatter scatter ( Scatter() .add_xaxis(df[rating].tolist()) .add_yaxis( 電影, df[eval_num].tolist(), symbol_size10, label_optsopts.LabelOpts(is_showFalse), ) .set_global_opts( title_optsopts.TitleOpts(title評(píng)分與熱度關(guān)系), xaxis_optsopts.AxisOpts(name評(píng)分), yaxis_optsopts.AxisOpts( name評(píng)價(jià)人數(shù), type_log # 對(duì)數(shù)坐標(biāo)處理數(shù)據(jù)跨度大的情況 ), tooltip_optsopts.TooltipOpts( formatter: 評(píng)分{a}, 評(píng)價(jià)人數(shù){c} ), ) ) scatter.render(scatter.html)5. 高級(jí)分析與洞察挖掘5.1 評(píng)分與熱度相關(guān)性分析計(jì)算皮爾遜相關(guān)系數(shù)correlation df[rating].corr(df[eval_num]) print(f評(píng)分與評(píng)價(jià)人數(shù)的相關(guān)系數(shù): {correlation:.3f})結(jié)果顯示相關(guān)系數(shù)約為0.15說(shuō)明兩者存在弱正相關(guān)但好電影不一定評(píng)價(jià)人數(shù)多。5.2 電影評(píng)分時(shí)間趨勢(shì)假設(shè)我們額外爬取了上映年份數(shù)據(jù)可以分析評(píng)分隨時(shí)間的變化plt.figure(figsize(12, 6)) sns.lineplot(datadf, xyear, yrating, ciNone) plt.title(Top250電影平均評(píng)分年度變化) plt.xticks(rotation45) plt.show()6. 項(xiàng)目?jī)?yōu)化與擴(kuò)展方向6.1 使用Streamlit構(gòu)建交互應(yīng)用將分析結(jié)果轉(zhuǎn)化為交互式Web應(yīng)用import streamlit as st st.title(豆瓣電影Top250分析) rating_filter st.slider(選擇評(píng)分范圍, 0.0, 10.0, (8.0, 9.0)) filtered_df df[(df[rating] rating_filter[0]) (df[rating] rating_filter[1])] st.write(f找到{len(filtered_df)}部電影) st.dataframe(filtered_df)6.2 部署與自動(dòng)化使用GitHub Actions實(shí)現(xiàn)每日自動(dòng)更新數(shù)據(jù)name: Daily Data Update on: schedule: - cron: 0 12 * * * # 每天UTC時(shí)間12點(diǎn)運(yùn)行 jobs: update: runs-on: ubuntu-latest steps: - uses: actions/checkoutv2 - name: Set up Python uses: actions/setup-pythonv2 with: python-version: 3.9 - name: Install dependencies run: pip install requests beautifulsoup4 pandas - name: Run scraper run: python scraper.py - name: Commit changes run: | git config --global user.name Automated git config --global user.email actionsusers.noreply.github.com git add . git commit -m Daily data update || exit 0 git push7. 常見(jiàn)問(wèn)題與解決方案7.1 爬蟲(chóng)被封禁怎么辦解決方案使用代理IP池并設(shè)置合理延遲實(shí)測(cè)有效的配置import time import random def safe_request(url): time.sleep(random.uniform(1, 3)) # 隨機(jī)延遲1-3秒 proxies { http: http://your_proxy:port, https: http://your_proxy:port } return requests.get(url, headersheaders, proxiesproxies)7.2 可視化圖表顯示中文亂碼Matplotlib默認(rèn)不支持中文需要手動(dòng)設(shè)置plt.rcParams[font.sans-serif] [SimHei] # Windows系統(tǒng) plt.rcParams[font.sans-serif] [Arial Unicode MS] # Mac系統(tǒng) plt.rcParams[axes.unicode_minus] False # 解決負(fù)號(hào)顯示問(wèn)題7.3 大數(shù)據(jù)量性能優(yōu)化當(dāng)處理超過(guò)10000條記錄時(shí)Pandas操作可能變慢??梢钥紤]使用Dask替代Pandas處理大數(shù)據(jù)對(duì)DataFrame應(yīng)用df df.astype({column: category})轉(zhuǎn)換分類數(shù)據(jù)使用numba.jit裝飾器加速數(shù)值計(jì)算8. 項(xiàng)目?jī)r(jià)值與應(yīng)用場(chǎng)景這個(gè)數(shù)據(jù)分析項(xiàng)目雖然以豆瓣電影為案例但其技術(shù)框架具有廣泛適用性電商平臺(tái)分析商品評(píng)分與銷量的關(guān)系社交網(wǎng)絡(luò)研究用戶活躍度與內(nèi)容質(zhì)量關(guān)聯(lián)教育領(lǐng)域評(píng)估課程評(píng)分與學(xué)生參與度的相關(guān)性在實(shí)際開(kāi)發(fā)中我特別推薦將核心功能模塊化比如將數(shù)據(jù)采集、清洗、分析、可視化分別封裝成獨(dú)立函數(shù)或類。這樣不僅便于維護(hù)也能快速適配其他類似項(xiàng)目。例如只需替換數(shù)據(jù)源接口同樣的分析流程就可以應(yīng)用于豆瓣讀書(shū)、音樂(lè)等榜單分析。

相關(guān)新聞

Dify工作流實(shí)戰(zhàn):通過(guò)HTTP節(jié)點(diǎn)集成外部API構(gòu)建智能天氣助手

Dify工作流實(shí)戰(zhàn):通過(guò)HTTP節(jié)點(diǎn)集成外部API構(gòu)建智能天氣助手

在實(shí)際 AI 應(yīng)用開(kāi)發(fā)中,我們經(jīng)常遇到一個(gè)核心需求:讓大語(yǔ)言模型(LLM)能夠獲取并處理實(shí)時(shí)、動(dòng)態(tài)的外部數(shù)據(jù)。無(wú)論是查詢天氣、股票價(jià)格,還是調(diào)用企業(yè)內(nèi)部系統(tǒng)的接口,僅僅依靠 LLM 的靜態(tài)知識(shí)庫(kù)是遠(yuǎn)遠(yuǎn)不夠的?!?/p>

2026/8/4 2:02:41 閱讀更多
GPT API穩(wěn)定調(diào)用指南:從環(huán)境配置到集成開(kāi)發(fā)

GPT API穩(wěn)定調(diào)用指南:從環(huán)境配置到集成開(kāi)發(fā)

這類工具最值得先看的不是功能列表,而是能不能在普通環(huán)境里穩(wěn)定跑起來(lái)。如果你正在找一種能持續(xù)訪問(wèn)、不折騰、適合日常開(kāi)發(fā)和學(xué)習(xí)的方法,并且對(duì)“GPT5.6”、“GPT Pro 5x/20x”這類說(shuō)法感到好奇,那這篇文章就是為你準(zhǔn)備的。我花了很長(zhǎng)時(shí)間實(shí)…

2026/8/4 2:02:41 閱讀更多
專業(yè)級(jí)4K錄屏工具核心技術(shù)解析與實(shí)戰(zhàn)指南

專業(yè)級(jí)4K錄屏工具核心技術(shù)解析與實(shí)戰(zhàn)指南

1. 項(xiàng)目概述:為什么我們需要專業(yè)級(jí)錄屏工具?去年幫朋友調(diào)試一場(chǎng)線上產(chǎn)品發(fā)布會(huì)時(shí),我用遍了市面上七款免費(fèi)錄屏工具。當(dāng)主講人演示關(guān)鍵功能時(shí),不是突然卡成PPT,就是錄出來(lái)的畫(huà)面糊得像打了馬賽克。這場(chǎng)災(zāi)難讓我意識(shí)到&a…

2026/8/4 2:02:41 閱讀更多
如何在React Router 中設(shè)置重定向: 從基礎(chǔ)到進(jìn)階的完整指南

如何在React Router 中設(shè)置重定向: 從基礎(chǔ)到進(jìn)階的完整指南

一、React Router 重定向基礎(chǔ)概念:理解核心原理與應(yīng)用價(jià)值 1.1 什么是重定向及其典型應(yīng)用場(chǎng)景 重定向是指在用戶訪問(wèn)某個(gè) URL 時(shí), 自動(dòng)將其導(dǎo)航到另一個(gè) URL 的機(jī)制。在單頁(yè)應(yīng)用 (SPA) 中, 重定向是路由系統(tǒng)的核心能力之一, 常用于以下場(chǎng)景: 用戶未登錄時(shí)跳轉(zhuǎn)到登…

2026/8/4 3:12:43 閱讀更多
EIP低代碼平臺(tái)-應(yīng)用管理-自定義按鈕

EIP低代碼平臺(tái)-應(yīng)用管理-自定義按鈕

開(kāi)源框架模塊詳解|碼云開(kāi)源EIP低代碼平臺(tái) 倉(cāng)庫(kù)地址:https://gitee.com/sunzewei/eip_lowcode EIP低代碼平臺(tái) 應(yīng)用管理-自定義按鈕功能詳解 摘要 自定義按鈕(自定義動(dòng)作)是工作表拓展業(yè)務(wù)操作的核心能力。無(wú)需開(kāi)發(fā)編碼&#xff0…

2026/8/4 3:12:43 閱讀更多
SolidWorks_標(biāo)準(zhǔn)零件庫(kù)2_Toolbox基礎(chǔ)操作

SolidWorks_標(biāo)準(zhǔn)零件庫(kù)2_Toolbox基礎(chǔ)操作

Toolbox基礎(chǔ)操作:從庫(kù)中插入螺栓、螺母、墊圈等緊固件的標(biāo)準(zhǔn)方法摘要:在機(jī)械設(shè)計(jì)與三維建模過(guò)程中,標(biāo)準(zhǔn)緊固件(螺栓、螺母、墊圈)的重復(fù)建模一直是效率的殺手。本文將深入講解SolidWorks Toolbox的核心操作&#xff0c…

2026/8/4 3:12:43 閱讀更多
珠寶AI精修圖能直接用做主圖嗎?4K輸出夠不夠?一文說(shuō)清

珠寶AI精修圖能直接用做主圖嗎?4K輸出夠不夠?一文說(shuō)清

很多珠寶電商團(tuán)隊(duì)都在問(wèn):AI精修出來(lái)的圖,到底能不能跳過(guò)人工,直接上架當(dāng)主圖?4K分辨率是營(yíng)銷噱頭還是真實(shí)用?我們結(jié)合造像嘰 等珠寶專用AI生圖平臺(tái)千款實(shí)拍實(shí)測(cè),把這幾個(gè)問(wèn)題拆開(kāi)聊透。 AI精修后的珠寶圖&a…

2026/8/4 3:12:43 閱讀更多
BOM成本優(yōu)化實(shí)戰(zhàn):我用AI幫一塊板子降了34%物料成本,附完整流程

BOM成本優(yōu)化實(shí)戰(zhàn):我用AI幫一塊板子降了34%物料成本,附完整流程

作者:科技界的一粒微塵 📋 本文概覽:用一個(gè)真實(shí)板子的 BOM 優(yōu)化過(guò)程,完整展示 AI 輔助的端到端降本流程——從原理圖提取 BOM、逐器件查價(jià)、找替代料到最終成本對(duì)比。所有數(shù)字真實(shí)、流程可復(fù)制。案例背景 這塊板子是一塊工業(yè)控制板…

2026/8/4 3:12:43 閱讀更多
Double值比較真相揭秘

Double值比較真相揭秘

以下是各程序清單的執(zhí)行結(jié)果及核心要點(diǎn)解析: Listing 1: DoubleDemo class DoubleDemo {public static void main(String args[]) {Double d1 Double.valueOf(3.14159);Double d2 Double.valueOf("314159E-5");System.out.println(d1 " "…

2026/8/4 3:02:43 閱讀更多
清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

清華大學(xué)重磅EST:植物自導(dǎo)電閃蒸焦耳熱600°C/2600°C兩步法!稀土超積累植物秒級(jí)轉(zhuǎn)化為CeO?-石墨烯電催化劑!

通訊作者:鄧兵、劉建國(guó)通訊單位:清華大學(xué)DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清潔能源技術(shù)與電子器件不可或缺的核心原料,然而傳統(tǒng)提取方式依賴能耗高、排放大的采礦與強(qiáng)…

2026/8/4 0:01:30 閱讀更多
貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

貴州師范大學(xué)JCIS:混合焓調(diào)控設(shè)計(jì)PtCoNiCuCr高熵合金!ORR半波電位0.89 V/質(zhì)量活性2.4倍Pt/C!

研究背景質(zhì)子交換膜燃料電池(PEMFCs)因其高能量轉(zhuǎn)換效率和清潔零排放特性備受關(guān)注,然而陰極氧還原反應(yīng)(ORR)動(dòng)力學(xué)遲緩、鉑催化劑成本高昂且耐久性不足的問(wèn)題嚴(yán)重制約了其商業(yè)化進(jìn)程。將 Pt 與 3d 過(guò)渡金屬合金化可調(diào)控…

2026/8/4 0:01:30 閱讀更多
福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

福州大學(xué)/清華大學(xué)AFM:脈沖焦耳熱900°C/1s合成Co?Cu催化劑,寬電位NH?法拉第效率~100%,MEA穩(wěn)定300h

通訊作者:萬(wàn)宇馳、張久俊、呂瑞濤通訊單位:福州大學(xué) 、清華大學(xué)DOI:https://doi.org/10.1002/adfm.76112核心導(dǎo)讀:本文提出"分步升級(jí)"廢硝酸鹽處理新路線——利用廢水中的金屬離子經(jīng)快速焦耳熱(40V&#xff…

2026/8/4 0:01:30 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動(dòng)化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動(dòng)批量混剪短視頻,自動(dòng)把視頻發(fā)布到抖音,快手,小紅書(shū),視頻號(hào)上,賺錢從來(lái)沒(méi)有這么容易過(guò)! 支持本地語(yǔ)音模型chatTTS,fasterwhisper,…

2026/8/3 7:44:46 閱讀更多
3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南

3分鐘搞定!QQ空間歷史說(shuō)說(shuō)完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說(shuō)說(shuō) 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過(guò),那些年發(fā)過(guò)的QQ空間說(shuō)說(shuō),那些記錄青春的文字…

2026/8/3 12:53:38 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號(hào)分配電路板。該型號(hào)(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號(hào)路由與分配功能。連接控制…

2026/8/3 19:34:52 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動(dòng)機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動(dòng)化設(shè)備及通用機(jī)械驅(qū)動(dòng)。該型號(hào)(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動(dòng)機(jī)。額定…

2026/8/3 19:34:54 閱讀更多