这次我们来看一个典型的 Python 大数据方向计算机毕业设计基于爬虫技术的新闻聚合平台。这个项目的技术栈很清晰就是 Python 爬虫 Hadoop Django。它要解决的问题也很普通但很实用把多个新闻网站或资讯源的内容采集下来统一清洗、存储再通过 Django 做一个聚合展示页面最后把数据放进 Hadoop 做简单的离线分析。整个过程刚好覆盖了“爬虫采集 - 数据入库 - Web 展示 - Hadoop 分析”这条完整链路。对于正在选毕设题目的同学来说这个项目最值得关注的点有三个技术栈覆盖面广从爬虫到 Web 开发再到 Hadoop 大数据处理都有涉及答辩时有内容可讲。每个模块都可以独立验证爬虫跑没跑到数据、Hadoop 分析有没有输出、Django 页面能不能展示边界很清楚。项目可以按“基础版”和“完整版”两个阶段来做先跑通 Django 爬虫再接入 Hadoop降低一开始的开发压力。这篇文章会从核心能力、技术拆分、环境准备、部署启动、功能验证、Hadoop 数据流转、API 与批量调度、资源占用、常见问题和最佳实践这几个角度展开。如果你正在准备毕业设计或课程设计完全可以把这套思路当作自己的项目骨架。1. 核心能力速览能力项说明项目类型Python 计算机毕业设计 / 课程设计核心技术栈Python、爬虫、Django、Hadoop主要功能新闻采集、数据清洗、内容聚合展示、后台管理、Hadoop 离线分析采集方式基于 requests / Scrapy 等通用爬虫方案具体以源码实际实现为准前端展示Django 模板渲染新闻分类、标题、来源、发布时间展示后台管理Django 自带 Admin 后台可管理新闻条目、爬虫来源、用户数据存储常见组合为 MySQL / SQLite具体需看项目的 settings.py 配置Hadoop 角色HDFS 存储采集数据或日志MapReduce 做词频统计等离线分析启动方式命令行启动 Django 服务 定时/手动运行爬虫脚本API 能力Django 视图可直接返回 JSON天然支持简单接口调用适合场景毕业设计、课程设计、竞赛项目、简历项目附带内容源码、文档报告、代码讲解、答辩演示需要说明的是不同版本的毕设项目在细节上差别很大。比如有的项目用 Scrapy有的用 requests有的 Hadoop 部分只是把数据导入 HDFS有的会跑 MapReduce 做热点词统计。拿到源码后第一步不是急着运行而是先看目录结构和 README确认项目到底用了哪种采集方式和哪种数据库。2. 技术栈拆解与项目价值2.1 Python 爬虫模块爬虫模块负责从新闻网站采集数据是整个项目的数据来源。常见实现方式是 requests 请求页面BeautifulSoup 或 lxml 解析 HTML提取标题、正文、发布时间、来源、图片地址等字段。从毕设的角度爬虫模块要能体现这几个能力请求构造设置 User-Agent、Referer、超时时间。页面解析从 HTML 中提取结构化字段。数据清洗去空白、去 HTML 标签、过滤无效内容。入库把清洗后的数据写入数据库。需要注意爬虫模块在答辩时很容易被追问反爬问题。准备一个合理的话术很重要只采集允许访问的公开页面遵守目标网站的 robots 协议控制请求频率不绕过登录限制不采集个人隐私数据。这样既安全又专业。2.2 Django Web 模块Django 模块承担业务展示和后台管理最核心的部分有数据模型新闻表、来源表、分类表、用户表。视图逻辑新闻列表、新闻详情、分类筛选、关键词搜索。模板页面首页、列表页、详情页、后台管理页。Admin 后台注册模型使用 Django 自带的增删改查页面。Django 的 MVT 结构很适合写进文档报告因为每一层职责都很清晰。Model 负责数据表结构View 负责业务逻辑Template 负责页面显示答辩时按这个思路讲就行了。2.3 Hadoop 大数据模块Hadoop 在这个项目里不是必须的但加上它之后项目的“大数据”属性会明显提升。常见的设计方式有两种一种是“存储型”爬虫采集到数据后除了写入数据库还同步导出到 JSON / CSV 文件再上传到 HDFS。这种方式实现难度低能展示 HDFS 基本操作。另一种是“分析型”把数据库中的新闻文本导出使用 MapReduce 做词频统计、热点词提取、新闻数量按来源统计等。这种方式更能体现 Hadoop 的价值答辩时也更有的讲。从实用角度看建议优先做“分析型”。因为词频统计是 Hadoop 经典场景代码逻辑简单效果直观老师一眼就能看懂项目里 Hadoop 的作用。2.4 项目价值这个项目对毕设来说最大的价值是“全链路清晰”。从数据采集到数据存储从 Web 展示到离线分析每一环都能看到数据流动。即使每一层做得都不深组合起来也是一个完整的系统符合大多数本科毕设的题目要求。3. 适用场景与使用边界3.1 适合什么人做计算机、软件工程、大数据相关专业的本科生需要完成毕设或课设。想同时掌握 Python 爬虫、Django Web 开发和 Hadoop 基础操作的初学者。需要把“大数据 爬虫 Web”三块能力打包成简历项目的同学。3.2 能解决的问题新闻信息分散在多个网站需要一个统一入口查看。手动复制粘贴新闻过于低效需要自动采集。采集到的数据需要做简单统计比如不同来源的新闻数量、高频关键词。需要一套可视化后台方便维护新闻数据和抓取来源。3.3 不适合什么场景不适合用于大规模线上生产Django 默认开发服务器并发能力有限。不适合做实时新闻流这个项目本质是定时采集 离线分析。不适合直接抓取付费内容、非公开接口和需要登录才能访问的数据。3.4 合规与安全边界爬虫模块是整个项目里合规风险最高的地方务必注意只采集公开可访问的页面。检查目标网站的 robots 协议。控制请求频率不要对目标服务器造成压力。不绕过反爬机制不做验证码破解。采集内容仅用于学习、研究和展示转载展示时注明来源。不采集个人隐私、账号信息、非公开内容。在做项目演示时建议选择几个明确允许数据抓取或无明确禁止的测试站点避免在答辩演示时出现访问异常或合规问题。4. 环境准备与前置条件这个项目涉及 Python 和 Hadoop 两套环境建议分开准备。4.1 Python 环境需要安装 Python 3.8 及以上版本。项目如果用了 Django 3.2 或 4.x建议直接使用 Python 3.10兼容性比较稳定。推荐创建虚拟环境避免多个项目依赖冲突python -m venv venv source venv/bin/activate # Windows 下使用 venv\Scripts\activate4.2 Python 依赖根据项目类型常见的依赖包含Django3.2,5.0 requests2.31.0 beautifulsoup44.12.0 lxml4.9.0 pymysql1.0.2注意这里只是通用清单。拿到源码后先查看项目根目录有没有 requirements.txt有的话直接安装pip install -r requirements.txt如果安装速度慢可以临时使用国内镜像源pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple4.3 Hadoop 环境Hadoop 在毕设项目中通常是伪分布式部署就是在一台机器上同时运行 HDFS 和 YARN 的各个进程。这个方案不需要多台服务器但对本机内存有一定要求建议至少 8G 内存。伪分布式环境准备JDK 1.8 或 JDK 11Hadoop 依赖 Java 环境。SSH 免密登录Hadoop 启动时会通过 SSH 管理进程。Hadoop 3.x 安装包下载后解压到本地目录。配置core-site.xml、hdfs-site.xml、yarn-site.xml等核心配置文件。4.4 数据库环境如果项目使用 MySQL需要提前安装 MySQL 8.0并创建数据库CREATE DATABASE news_platform DEFAULT CHARACTER SET utf8mb4;如果项目默认使用 SQLite则不需要额外安装Django 会自动生成db.sqlite3文件。4.5 端口准备Django 默认使用 8000 端口。Hadoop NameNode Web 界面默认使用 9870 端口Hadoop 3.x。YARN ResourceManager Web 界面默认使用 8088 端口。启动前先确认端口没有被占用。5. 安装部署与启动方式这里给出一套通用的部署流程具体命令需要以你拿到的源码为准。5.1 安装依赖cd news_platform python -m venv venv source venv/bin/activate pip install -r requirements.txt5.2 修改数据库配置如果项目使用 MySQL需要打开settings.py修改数据库连接信息DATABASES { default: { ENGINE: django.db.backends.mysql, NAME: news_platform, USER: root, PASSWORD: your_password, HOST: 127.0.0.1, PORT: 3306, } }同时需要在项目的__init__.py中引入 pymysql因为 Python 3 环境下 PyMySQL 是用来替代 MySQLdb 的import pymysql pymysql.install_as_MySQLdb()5.3 执行数据库迁移python manage.py makemigrations python manage.py migrate5.4 创建后台管理员账号python manage.py createsuperuser按提示输入用户名、邮箱可跳过、密码。5.5 启动 Django 服务python manage.py runserver 0.0.0.0:8000启动成功后浏览器访问http://127.0.0.1:8000可以看到前台页面访问http://127.0.0.1:8000/admin可以进入后台。5.6 启动 Hadoop 服务如果项目涉及 Hadoop需要先启动 HDFS 和 YARNcd $HADOOP_HOME/sbin start-dfs.sh start-yarn.sh启动后执行jps确认进程jps正常情况下可以看到这些进程NameNode DataNode SecondaryNameNode ResourceManager NodeManager如果缺少某个进程说明 Hadoop 配置有问题需要查看对应日志。6. 功能测试与效果验证项目跑起来之后不要急着截图按顺序做一轮功能验证确保每个模块都能正常工作。6.1 验证 Django 后台测试目的验证数据模型和 Admin 后台是否正常。操作步骤浏览器访问后台登录页。使用管理员账号登录。检查后台是否能显示新闻、分类、来源、用户等数据表。尝试手动新增一条新闻。修改该新闻的标题或分类。删除该新闻。预期结果后台能正常增删改查。表单提交后数据库记录同步变化。常见失败原因迁移没有执行后台找不到数据表。数据库连接配置错误。创建超级用户失败。6.2 验证前台新闻聚合展示测试目的验证前台页面数据的读取和展示。操作步骤在后台手动添加 5 到 10 条新闻数据。访问前台首页。确认新闻列表是否按发布时间排序。点击一条新闻进入详情页。验证标题、来源、发布时间、正文内容是否正常展示。预期结果前台页面能读取数据库中的数据。详情页跳转正常。常见失败原因模板变量名和视图返回的数据不一致。静态文件缺失导致页面样式错乱。数据表没有数据导致列表为空。6.3 验证爬虫采集链路测试目的验证爬虫能不能真实采集到数据。操作步骤查看爬虫源码确认目标网站。在命令行运行爬虫脚本或 Django 管理命令。观察日志输出。到后台查看是否新增了采集数据。示例命令具体以项目为准python manage.py runspider或者直接运行爬虫脚本python spiders/news_spider.py预期结果爬虫成功请求页面。解析出标题、正文、时间、来源等字段。新数据写入数据库。重复数据没有重复入库。常见失败原因目标网站页面结构变更HTML 选择器失效。请求被目标网站拦截。没有设置 User-Agent。数据编码不是 UTF-8解析后乱码。6.4 验证增量采集与去重测试目的验证多次运行爬虫时不会产生重复数据。操作步骤第一次运行爬虫。记录后台新闻条数。第二次运行同样命令。再次查看后台新闻条数。预期结果第二次运行后新增条数很少或为 0。没有产生大量重复数据。常见失败原因项目没有实现去重逻辑。去重逻辑只比对标题标题相同但内容不同的新闻被误判。每次采集都生成新的唯一标识导致去重失效。6.5 验证 Hadoop 数据导入与分析测试目的验证数据能否导入 HDFS并执行 MapReduce 分析任务。操作步骤从数据库中导出新闻文本数据为 JSON 或 CSV 文件。在 HDFS 中创建输入目录。上传数据文件到 HDFS。运行词频统计或数据统计任务。查看输出结果。HDFS 通用命令示例hdfs dfs -mkdir -p /news/input hdfs dfs -put news_export.json /news/input/运行 WordCount 通用示例hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /news/input /news/output任务完成后查看结果hdfs dfs -cat /news/output/part-r-00000 | head -n 20预期结果数据文件成功上传。MapReduce 任务正常结束。输出文件里能看到统计后的高频词。常见失败原因Hadoop 进程没有全部启动。NameNode 处于 SafeMode 状态。输入路径不存在。同一输出路径已经存在需要先删除。6.6 验证搜索与分类筛选测试目的验证新闻平台的基本检索能力。操作步骤在前台搜索框输入一个关键词。点击分类标签。查看返回结果。预期结果搜索结果包含标题或内容中匹配关键词的新闻。分类筛选只显示当前分类下的新闻。空结果显示友好提示。7. Hadoop 模块设计与数据流转这部分是毕设答辩的重点也是项目区别于普通 Django 新闻网站的关键。7.1 数据流转流程整个系统的数据流转可以概括为爬虫从外部网站采集原始新闻数据。数据清洗后写入 MySQL / SQLite。Django 从数据库读取数据渲染前台页面。同时将新闻数据导出为结构化文件上传到 HDFS。MapReduce 对 HDFS 中的新闻文本做离线分析。分析结果写回 HDFS 或展示在管理页面。7.2 HDFS 目录设计建议建议按照数据批次组织目录方便后期管理和重跑任务/news/input/20250601_news.json /news/input/20250602_news.json /news/output/wordcount_20250601 /news/output/wordcount_202506027.3 MapReduce 分析思路如果只是做一个最简单的演示可以用词频统计来体现 Hadoop 的作用。统计所有新闻中出现最多的关键词一定程度上反映热点话题。MapReduce 的实现思路Map 阶段将新闻标题和正文按空格、标点切分成单词输出word, 1。Reduce 阶段对同一个单词的所有计数求和输出word, totalCount。这一步在毕设文档里很好写也是 Hadoop 课程里的标准案例。7.4 如何让 Hadoop 模块不显得生硬常见的问题是项目里用 Hadoop 的方式很牵强就是为了用而用。要避免这个问题可以从业务角度串联“新闻每天产生大量文本数据需要离线统计今天的新闻热点。”“统计结果可以用于前台展示热点新闻标签。”“Django 只负责交互展示离线计算交给 Hadoop两者分工明确。”这样讲Hadoop 在项目里的定位就合理了。8. 接口 API 与批量调度8.1 Django 返回 JSON 接口如果项目需要给前端页面或其他系统提供数据可以在 Django 中写一个简单的 JSON 接口。通用示例from django.http import JsonResponse from .models import News def news_list_api(request): keyword request.GET.get(keyword, ) news_items News.objects.all() if keyword: news_items news_items.filter(title__icontainskeyword) data list(news_items.values(title, source, publish_time)[:50]) return JsonResponse({code: 0, data: data})前端或测试工具可以直接访问http://127.0.0.1:8000/api/news?keywordpython返回结果形式{ code: 0, data: [ { title: Python 爬虫教程, source: 示例新闻源, publish_time: 2025-06-01 10:00:00 } ] }这个接口说明项目具备了简单的数据服务能力毕设文档里可以写“平台支持对外提供 JSON 数据接口”。8.2 爬虫定时调度爬虫不能一直靠手动运行建议使用系统定时任务或 Python 定时任务。Linux 下使用 crontab 的通用示例# 每天凌晨 2 点执行增量采集 0 2 * * * cd /path/to/news_platform /usr/bin/python manage.py runspider logs/spider.log 21如果项目使用 Django 自定义管理命令示例命令可能是python manage.py crawl_news具体以项目源码为准。8.3 批量任务注意事项批量新闻采集需要考虑几个问题请求失败重试单个新闻源请求失败不能导致整个任务中断。日志输出记录每次请求的状态码、耗时、新增数据条数。去重防止重复入库。频率控制每两个请求之间增加随机延时降低目标服务器压力。时间间隔示例import time import random time.sleep(random.uniform(1, 3))9. 资源占用与性能观察9.1 Django 开发服务器资源占用开发环境下直接使用python manage.py runserver即可。它是单进程开发服务器适合本地测试不适合压测上线。在做性能测试时建议只测试功能不要追求并发数据。9.2 Hadoop 资源占用伪分布式 Hadoop 是资源占用大户尤其是内存。在不调整参数的情况下一台 8G 内存的机器跑虚拟机 Hadoop Django 爬虫会比较吃力。建议本地开发时先不启动 Hadoop只跑 Django 和爬虫。需要验证 Hadoop 模块时再启动 Hadoop验证完关掉。可以通过调整hadoop-env.sh中的HADOOP_HEAPSIZE限制堆内存。9.3 爬虫并发与性能单个线程的 requests 爬虫速度较慢但胜在稳定。如果使用多线程需要控制线程数量避免请求频率过高。建议先在单个页面上测试爬取速度再决定是否增加并发。9.4 日志查看方式Django 开发模式下日志直接输出到控制台。爬虫脚本如果有日志模块通常写在logs/目录下。查看日志时关注三个信息爬虫是否成功请求页面。解析出的数据条数是否正常。是否有异常堆栈。10. 常见问题与排查方法问题现象可能原因排查方式解决方案pip install安装依赖失败网络原因或依赖冲突查看错误信息确认是超时还是版本冲突使用国内镜像源或升级 pip 后重试Django 启动报模块不存在未安装依赖或未进入虚拟环境执行pip list检查依赖列表安装依赖后重新启动后台登录报错未创建超级用户或密码错误重新执行createsuperuser创建新管理员账号数据库表不存在未执行迁移命令查看 MySQL 中是否存在数据表执行migrateMySQL 连接失败数据库服务未启动或密码错误使用命令行测试连接启动 MySQL 并修正配置爬虫请求被拒绝缺少 User-Agent 或频率过高查看响应状态码增加请求头降低频率爬虫解析不到数据页面结构变化或选择器错误打印响应内容检查更新 HTML 选择器中文乱码页面编码设置错误检查resp.encoding设置为对应编码采集数据重复缺少去重逻辑查看爬虫代码中是否有唯一性判断增加标题唯一约束或去重逻辑Hadoop 启动少进程SSH 免密未配置或配置错误查看日志和jps输出重新配置 Java、SSH、Hadoop 环境变量HDFS 文件上传失败NameNode 处于 SafeMode执行hdfs dfsadmin -safemode leave关闭安全模式后重试MapReduce 任务失败内存不足或输出路径已存在查看 YARN 日志删除输出目录或调整内存参数11. 最佳实践与使用建议这个项目虽然是一个毕设项目但完全可以按照工程项目的方式去组织和验收。11.1 目录结构建议news_platform/ ├── manage.py ├── requirements.txt ├── README.md ├── news_platform/ # Django 项目配置 ├── news/ # 新闻应用 │ ├── models.py │ ├── views.py │ ├── urls.py │ ├── templates/ │ └── management/ │ └── commands/ │ └── runspider.py ├── spiders/ # 爬虫脚本 ├── scripts/ # 数据导入导出脚本 ├── docs/ # 文档报告 ├── logs/ # 日志目录 └── data/ # 采集数据临时目录11.2 版本控制与备份建议把整个项目放到 Git 仓库中管理至少保留稳定版本标签。文档报告和答辩 PPT 同步更新特别是技术栈说明、数据库设计、系统架构图这三块。11.3 答辩演示顺序建议建议演示时按照以下顺序展示逻辑更顺主页展示说明新闻聚合平台的整体效果。后台管理展示新闻数据的增删改查。爬虫采集现场运行一条爬虫或展示已有采集日志。Hadoop 分析展示 HDFS 文件和 MapReduce 统计结果。接口调用使用浏览器或 Postman 访问 JSON 接口。11.4 爬虫合规注意事项再次强调采集目标选择公开、允许访问的新闻站点。在文档报告中明确写明“本项目仅用于学习研究不做商业化使用”。不采集非公开接口、登录后内容、个人隐私数据。控制爬取频率不造成对方服务器压力。展示采集结果时注明来源。11.5 文档报告写作建议毕设文档报告比起代码可能更影响最终评分。建议至少包含系统需求分析用户需求、功能需求、非功能需求。系统设计总体架构、模块设计、数据库 ER 图。详细设计爬虫模块流程、Django 页面流程、Hadoop 数据处理流程。系统实现核心代码片段和解释。系统测试测试用例、测试结果、问题修复记录。总结与展望项目难点、收获、后续改进方向。12. 总结与下一步这个项目最值得尝试的地方在于它把 Python 爬虫、Django 后端开发和 Hadoop 大数据处理串在了一条完整的数据流上。你不需要把每个模块做得十分深入只要保证链路通畅、功能可验证、文档完整就能在答辩时讲清楚一个系统。拿到项目源码后建议第一个先做的事情是跑通 Django 启动和后台登录确认基础环境没问题。然后再运行爬虫看数据能不能正常入库。最后再启动 Hadoop把数据导入 HDFS 并跑一次简单的分析任务。按这个顺序走每一步的成功标准都很明确出现问题也容易定位。最容易踩的坑有三个第一个是 Python 依赖和 Django 版本不匹配启动时报模块错误第二个是 Hadoop 环境配置问题经常因为 SSH 免密或环境变量导致进程启动不全第三个是爬虫目标网站页面结构变动解析不到数据。这三个问题都需要通过看日志和打印响应内容来排查。后续可以扩展的方向也不少比如给爬虫模块加上分布式的爬取能力在 Hadoop 分析层用 Spark 替代 MapReduce在 Django 前端引入更多可视化图表把新闻来源分布、关键词趋势用图表展示出来或者在平台里增加用户收藏、评论功能让系统更像一个完整的新闻产品。总结起来这个项目是典型的“全链路毕设题”难度适中、可扩展性强、答辩材料好写。建议收藏备用平时多跑几遍流程把所有问题提前暴露后面答辩演示就不会手忙脚乱。