ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于爬虫与Hadoop的新闻聚合平台设计与实现

基于爬虫与Hadoop的新闻聚合平台设计与实现 这次我们来看一个很适合做毕业设计或课程设计的完整项目基于爬虫技术的新闻聚合平台。开发语言是 Python后端框架用 Django数据存储和加工环节接入 Hadoop配合爬虫自动采集新闻数据。最重要的是这类项目通常附带源码、文档报告和代码讲解对需要快速出成果、又要讲清楚技术原理的同学来说价值很高。先给结论如果你正在找 Python 相关毕设题目又希望项目里能同时体现爬虫采集、大数据存储、Web 展示三条技术线这个新闻聚合平台是一个结构清晰、答辩有话说、可扩展性也不错的选题。文章会从项目整体架构拆解开始讲清楚爬虫模块、Hadoop 数据链路、Django Web 端各自做什么再给出环境准备、启动部署、功能测试、接口调用和常见问题排查的完整流程。本文适合这几类读者计算机相关专业正在选毕业设计题目或课程设计题目的同学。想学习 Python 爬虫如何与大数据框架结合的开发者。需要一套“爬虫 Hadoop Django”完整案例作为技术参考的人。想在答辩前把项目结构、核心代码、部署流程彻底理清楚的同学。整个项目可以拆成三层数据采集层爬虫、数据存储与加工层Hadoop、业务展示层Django Web。下面直接从架构开始拆解。1. 核心能力速览先从整体上把这个项目的关键信息列出来方便判断它适不适合作为你的毕设或课设题目。能力项说明项目类型新闻聚合平台属于数据采集 大数据存储 Web 展示的综合项目技术栈Python、爬虫Requests/Scrapy 等、HadoopHDFS/Hive、Django主要功能新闻数据采集、数据清洗与存储、新闻分类展示、关键词检索、数据统计数据链路爬虫采集 - 数据清洗 - 存入 Hadoop HDFS - Django 读取并展示启动方式Django 服务启动 爬虫脚本单独运行 Hadoop 环境预先启动是否支持 APIDjango 可以快速提供 JSON 接口适合做前后端分离扩展是否支持批量任务爬虫天然支持批量采集也可以扩展定时任务适合场景毕业设计、课程设计、Python 全栈和大数据入门综合练习硬件门槛低。普通电脑即可运行Hadoop 使用伪分布式模式即可是否支持 50 系显卡不涉及。纯 CPU 项目不需要 GPU显存占用不涉及。项目不吃显存主要看内存和磁盘空间值得说明的是Hadoop 在生产环境通常是集群部署但作为毕设项目伪分布式模式完全够用。一台普通电脑同时跑 Django 和 Hadoop 伪分布式内存 8GB 以上会比较流畅16GB 更稳妥。数据量不大时HDFS 的存储压力可以忽略。2. 项目整体设计与技术架构这类项目的难点通常不是某个单一技术而是把爬虫、大数据、Web 三条链路串联起来。很多同学单独学过 Python单独写过 Django也单独跑过 Hadoop但不知道它们之间怎么配合。下面把每一层的作用和数据流向拆开讲。2.1 系统模块划分爬虫模块负责从新闻网站采集标题、正文、发布时间、来源、分类等信息。采集完成后做基础清洗输出结构化数据。数据存储模块将清洗后的新闻数据写入 Hadoop HDFS形成分布式存储。也可以进一步用 Hive 建表做统计分析。业务后端模块Django 提供 Web 界面展示新闻列表、新闻详情、分类筛选、关键词搜索等功能。数据统计模块扩展基于 Hadoop 存储的数据统计新闻数量、来源分布、发布时间趋势等。2.2 数据流走向爬虫从目标网站抓取新闻数据后原始数据可能带有 HTML 标签、空字段、重复内容需要先做清洗。清洗后的数据生成结构化文件比如 CSV 或 JSON然后上传到 Hadoop HDFS。Django 后端可以直接读取 HDFS 中的文件也可以把数据导入数据库做展示。这里有一个常见的简化路径爬虫采集 - 数据清洗 - 保存到本地临时文件 - 调用 Hadoop 命令上传到 HDFS - Django 通过 HDFS API 或预导入的数据库展示数据。对于课程设计或毕设不需要追求实时流处理采用“先采集、再存储、后展示”的离线流程是最稳的方案也更容易在答辩时讲清楚。2.3 为什么选择 Hadoop很多同学会问一个新闻聚合平台用 MySQL 不就行了吗为什么还要接 Hadoop这个问题的答案其实就是毕设的技术亮点爬虫采集的数据可能是海量的单机数据库存储和查询会遇到瓶颈。HDFS 适合存储大文件天然支持横向扩展。新闻数据是非结构化或半结构化的Hadoop 生态适合处理这类数据。引入 Hadoop 后项目技术栈更丰富体现大数据处理能力。当然实际开发中也可以做“双写”核心业务数据存数据库用于 Web 端快速查询原始全量数据存 HDFS用于离线分析和扩展。3. 环境准备与前置条件这一步是很多同学卡住的地方。环境装不好后面全白搭。下面给出一套经过验证的通用环境准备清单结合自己电脑的系统版本做调整。3.1 操作系统Windows 10/11、macOS、Linux 都可以。其中Linux 和 macOS 对 Hadoop 的友好度更高Windows 上跑 Hadoop 需要额外处理本地库问题。如果毕设要求在 Windows 上演示建议装虚拟机或使用 WSL2 跑 HadoopDjango 和爬虫放在 Windows 主系统两边通过网络通信。# 查看系统版本确认位数 uname -a # Linux / macOSWindows 可以在“设置 - 系统 - 关于”里查看。3.2 Python 版本项目依赖 Python 3 环境。Django 版本不同对 Python 版本要求也不同。稳妥的做法是 Python 3.8 到 3.11 之间具体看项目 requirements.txt 里的声明。python --version如果安装了多个 Python 版本建议用虚拟环境隔离# 创建虚拟环境 python -m venv venv # 激活虚拟环境 # Windows venv\Scripts\activate # Linux / macOS source venv/bin/activate虚拟环境的好处是不会把项目依赖装到系统全局环境里避免版本冲突。下载项目源码后第一步就建虚拟环境这是最稳的习惯。3.3 Hadoop 环境Hadoop 采用伪分布式模式即可即一台机器同时模拟 NameNode、DataNode、ResourceManager、NodeManager 等角色。需要提前安装JDK 1.8 或 JDK 11Hadoop 3.x 需要 JDK 8 以上Hadoop 3.x 版本下载二进制包后解压SSHLinux/macOS 一般自带Windows 需要配置Hadoop 环境变量示例export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 export HADOOP_HOME/opt/hadoop export PATH$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbinHadoop 修改的核心配置文件主要有core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xmlhadoop-env.sh伪分布式模式下这些文件配置比较简单网上有很多教程这里不展开。重点是确认启动后能访问http://localhost:9870Hadoop 3.x 的 NameNode Web 界面看到 DataNode 状态正常。# 格式化文件系统仅在第一次启动时执行 hdfs namenode -format # 启动 HDFS start-dfs.sh # 启动 YARN start-yarn.sh # 查看进程是否正常 jps正常情况下jps能看到以下进程NameNodeDataNodeSecondaryNameNodeResourceManagerNodeManager只要这几个进程在Hadoop 环境就算准备好了。3.4 Django 环境Django 是一个 Python Web 框架安装非常简单pip install django为了后面方便做数据可视化接口还可以安装pip install djangorestframework pip install pandas pip install requests其中requests是爬虫必须的pandas用于数据处理和 CSV 文件生成。3.5 数据库选择Django 默认使用 SQLite零配置适合起步。如果项目要求使用 MySQL需要安装pip install pymysql然后在 Django 项目的settings.py中配置import pymysql pymysql.install_as_MySQLdb() DATABASES { default: { ENGINE: django.db.backends.mysql, NAME: news_db, USER: root, PASSWORD: your_password, HOST: 127.0.0.1, PORT: 3306, } }对于毕设演示SQLite 完全够用也省去数据库服务管理的麻烦。如果想突出技术点再用 MySQL 不迟。3.6 磁盘和内存这个项目不涉及 GPU 和显存主要看内存和磁盘内存建议 8GB 以上16GB 体验最佳。Hadoop 多个 Java 进程会占用不少内存。磁盘建议预留 20GB 以上Hadoop 数据目录、日志文件、Python 依赖包都会占空间。如果使用虚拟机跑 Hadoop虚拟机硬盘至少给 30GB。4. 安装部署与启动方式下面给出一套完整的部署流程。实际路径需要根据项目源码目录结构调整但整体顺序是通用的。4.1 下载项目源码并配置虚拟环境# 进入项目目录 cd news-aggregation-platform # 创建并激活虚拟环境 python -m venv venv source venv/bin/activate # Windows 用 venv\Scripts\activate # 安装依赖 pip install -r requirements.txt如果项目没有提供 requirements.txt就手动安装核心依赖pip install django requests beautifulsoup4 pandas djangorestframework4.2 配置 Django 项目进入项目根目录找到manage.py文件先执行数据库迁移# 生成迁移文件并写入数据库 python manage.py makemigrations python manage.py migrate # 创建超级管理员用于登录后台 python manage.py createsuperuser启动 Django 开发服务器测试python manage.py runserver 0.0.0.0:8000浏览器访问http://127.0.0.1:8000能看到 Django 默认页面或项目首页说明 Web 端已经跑通。4.3 准备 Hadoop 环境确保 Hadoop 已经启动start-dfs.sh start-yarn.sh jps如果jps输出正常接下来在 HDFS 中创建项目数据目录hdfs dfs -mkdir -p /news/data hdfs dfs -ls /后续爬虫抓取的数据会上传到/news/data目录。4.4 运行爬虫采集数据爬虫脚本一般单独放在spider/或crawler/目录下运行方式类似python spider/run_spider.py爬虫工作完成后会生成清洗后的结构化数据文件。以上传到 HDFS 为例# 将本地生成的新闻数据文件上传到 HDFS hdfs dfs -put /path/to/news_data.csv /news/data/建议把爬虫脚本设计成“采集 - 清洗 - 输出 CSV/JSON - 上传 HDFS”一条命令完成。这样答辩演示的时候一条命令就能展示完整的数据链路。4.5 将 HDFS 数据导入 Django这一步有两种常见做法方案一直接读取 HDFS 文件在 Django 视图函数中调用 HDFS API 读取文件内容解析后渲染到前端。优点是不需要额外存储缺点是高并发下性能一般。import subprocess from django.http import JsonResponse def read_news_from_hdfs(request): result subprocess.run( [hdfs, dfs, -cat, /news/data/news_data.csv], capture_outputTrue, textTrue ) content result.stdout # 解析 CSV 内容并返回 return JsonResponse({data: content})方案二预导入数据库爬虫采集完成后将清理后的数据导入 SQLite 或 MySQL。Django 通过 ORM 查询数据库展示速度更快也更容易实现分页、搜索、筛选。import csv from news.models import News def import_csv_to_db(csv_path): with open(csv_path, r, encodingutf-8) as f: reader csv.DictReader(f) for row in reader: News.objects.create( titlerow[title], contentrow[content], sourcerow[source], publish_timerow[publish_time], categoryrow[category] )对于毕设项目推荐方案二。数据库查询性能更好Web 端功能实现更简单。HDFS 存储原始数据体现大数据链路数据库存储展示数据保证 Web 端流畅。5. 爬虫模块功能测试与效果验证爬虫是数据入口直接决定整个平台有没有数据可用。所以第一步先验证爬虫能否正常工作。5.1 测试爬虫基础采集测试目标验证爬虫能否从目标网站抓取到标题、正文、发布时间、来源等信息。操作流程检查爬虫配置文件中目标网站的地址。运行单个新闻页面的采集测试。观察控制台输出的抓取结果。输入示例爬虫配置片段# spider/config.py TARGET_URLS [ https://news.example.com/tech, https://news.example.com/sports, https://news.example.com/finance, ] HEADERS { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } REQUEST_INTERVAL 2 # 请求间隔单位秒预期输出[INFO] 正在抓取: https://news.example.com/tech [INFO] 解析到 20 条新闻 [INFO] 标题: 某某科技公司发布新一代芯片 [INFO] 发布时间: 2025-01-15 10:30 [INFO] 来源: 示例新闻网 [INFO] 数据已保存至 data/tech_20250115.csv判断成功的标准控制台正确输出新闻标题和正文。生成的 CSV 文件能够正常打开。中文字符没有乱码。常见失败原因页面结构变化选择器失效。需要更新 BeautifulSoup 或 XPath 规则。目标网站开启反爬需要调整请求头或访问频率。网络问题requests 请求超时。5.2 测试数据清洗功能爬虫抓到的原始 HTML 可能包含大量标签和不规范字符清洗逻辑需要单独验证。import re from bs4 import BeautifulSoup def clean_html(raw_html): soup BeautifulSoup(raw_html, html.parser) text soup.get_text() text re.sub(r\s, , text).strip() return text测试时准备一段带 HTML 标签的文本调用清洗函数看输出是否只剩下纯文本。重点验证去标签、去空白、去特殊符号三个操作。5.3 测试去重功能爬虫重复运行时会抓到相同新闻需要在入库前做去重。常见的去重方式是依据新闻标题或 URL 进行判断。existing_titles set(News.objects.values_list(title, flatTrue)) def is_duplicate(news_title): return news_title in existing_titles测试方法连续运行两次爬虫观察第二次是否跳过已入库的新闻。如果第二次没有产生重复数据说明去重有效。5.4 批量采集测试批量采集是爬虫的核心能力。建议设计成循环抓取多个分类页面的模式。def batch_crawl(urls): all_news [] for url in urls: data crawl_single_page(url) all_news.extend(data) time.sleep(REQUEST_INTERVAL) return all_news测试时先跑 2~3 个页面确认批量流程正常后再跑全量。不要一开始就大批量抓取避免访问频率过高导致 IP 受限。5.5 爬虫合规提醒这部分单独强调一下。毕设项目中的爬虫必须遵守目标网站的 robots 协议控制访问频率不抓取个人隐私信息不用于商业用途。尤其是新闻网站版权内容需要谨慎处理。建议测试时选择允许爬虫访问的站点或者使用自己搭建的测试站点。在毕设论文中也要写明爬虫的合规边界这是答辩老师会关注的细节。6. Hadoop 数据存储与加工测试爬虫产出的数据上传到 HDFS 后需要验证数据是否真正写入成功以及能否被后续模块正常读取。6.1 验证 HDFS 数据写入# 查看 HDFS 中的文件 hdfs dfs -ls /news/data # 查看文件内容 hdfs dfs -cat /news/data/news_data.csv | head -20预期结果能看到之前上传的数据文件内容与本地一致没有乱码。6.2 验证 HDFS 数据查询可以用 Hive 或 Spark 对 HDFS 中的数据进行简单的统计分析。如果项目没有集成 Hive可以先跳过这一步但建议在毕设中体现一部分数据加工能力。创建 Hive 外部表的 SQL 示例CREATE EXTERNAL TABLE news_data ( title STRING, content STRING, source STRING, publish_time STRING, category STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE LOCATION /news/data;建表后执行统计查询SELECT category, COUNT(*) FROM news_data GROUP BY category;这个统计结果可以展示在 Django 管理后台的统计页面上让项目看起来更完整。6.3 Hadoop 数据加工流程总结爬虫采集后生成的 CSV/JSON 文件统一存放data/目录。使用hdfs dfs -put上传到 HDFS 指定目录。如果使用 Hive则创建外部表直接指向 HDFS 目录省去数据导入步骤。Django Web 端读取数据库中最新的新闻数据用于展示。7. Django Web 端功能验证Django 是项目对外展示的窗口也是答辩演示的重点。下面按功能逐个验证。7.1 新闻列表展示访问首页应该能看到新闻分页列表。每篇新闻展示标题、发布时间、来源和分类。验证点列表是否从数据库读取数据。分页是否正常。分类筛选是否生效。Django 视图示例from django.core.paginator import Paginator from django.shortcuts import render from news.models import News def news_list(request): category request.GET.get(category, ) queryset News.objects.all().order_by(-publish_time) if category: queryset queryset.filter(categorycategory) paginator Paginator(queryset, 10) page_number request.GET.get(page) page_obj paginator.get_page(page_number) return render(request, news/list.html, {page_obj: page_obj})7.2 新闻详情页点击标题进入详情页验证内容是否完整展示。def news_detail(request, news_id): news get_object_or_404(News, pknews_id) return render(request, news/detail.html, {news: news})验证点正文是否完整。上一篇/下一篇导航是否正常。页面加载速度是否可接受。7.3 关键词搜索新闻聚合平台最常用的功能就是搜索。Django 的 ORM 提供了简单的查询方式。def search(request): keyword request.GET.get(q, ) results News.objects.filter(title__icontainskeyword) return render(request, news/search_results.html, {results: results})验证点中文关键词能否正确搜索。搜索速度是否流畅。无结果时页面是否有友好提示。如果数据量大可以在搜索上引入 Elasticsearch但毕设项目用数据库模糊查询即可。7.4 数据统计页面结合 Hive 统计结果或 Django ORM 聚合查询做一个简单的数据看板。from django.db.models import Count from django.http import JsonResponse def news_statistics(request): stats News.objects.values(category).annotate(totalCount(id)) data {item[category]: item[total] for item in stats} return JsonResponse(data)前端可以用简单的 Chart.js 加载柱状图或饼图展示各分类新闻数量分布。这个模块很能提升项目完成度。7.5 Django 管理后台Django 自带 Admin 后台注册模型后可以直接在后台管理新闻数据。from django.contrib import admin from news.models import News admin.register(News) class NewsAdmin(admin.ModelAdmin): list_display (title, source, category, publish_time) search_fields (title, content) list_filter (category, source)启动服务后访问http://127.0.0.1:8000/admin使用前面创建的超级管理员账号登录可以查看、添加、编辑、删除新闻记录。这个功能在答辩演示时非常实用。8. 接口 API 与批量任务设计如果项目升级为前后端分离模式或者需要给移动端提供数据Django 可以直接提供 JSON API。8.1 API 列表设计接口名称方法路径功能说明新闻列表GET/api/news/分页获取新闻列表支持分类和关键词过滤新闻详情GET/api/news/id/获取单篇新闻详情分类统计GET/api/stats/按分类统计新闻数量数据源状态GET/api/spider/status/查看爬虫运行状态和数据量8.2 API 调用示例使用 Django REST Framework 实现一个简单的新闻列表接口from rest_framework.decorators import api_view from rest_framework.response import Response from news.models import News from news.serializers import NewsSerializer api_view([GET]) def news_api_list(request): category request.GET.get(category, ) keyword request.GET.get(q, ) queryset News.objects.all().order_by(-publish_time) if category: queryset queryset.filter(categorycategory) if keyword: queryset queryset.filter(title__icontainskeyword) serializer NewsSerializer(queryset, manyTrue) return Response(serializer.data)对应的 Serializerfrom rest_framework import serializers from news.models import News class NewsSerializer(serializers.ModelSerializer): class Meta: model News fields [id, title, source, category, publish_time, summary]启动 Django 服务后用 curl 验证接口curl http://127.0.0.1:8000/api/news/?categorytech也可以用 Python requests 调用import requests url http://127.0.0.1:8000/api/news/?categorytech response requests.get(url, timeout10) if response.status_code 200: news_data response.json() print(f获取到 {len(news_data)} 条新闻) else: print(接口调用失败)8.3 批量任务设计爬虫的批量采集可以结合 Celery 或 APScheduler 做定时任务。这里给出一个简单的思路。安装 APSchedulerpip install apscheduler定时执行爬虫任务示例from apscheduler.schedulers.background import BackgroundScheduler from django_apscheduler.jobstores import DjangoJobStore from spider.run_spider import run_all_spiders scheduler BackgroundScheduler() scheduler.add_jobstore(DjangoJobStore(), default) # 每天凌晨 2 点执行全量采集 scheduler.add_job( run_all_spiders, triggercron, hour2, minute0, iddaily_news_crawl, replace_existingTrue ) scheduler.start()批量任务注意事项添加任务日志记录每次采集的起止时间、成功数量、失败数量。对失败任务设置重试机制最多重试 3 次。各爬虫任务之间做好隔离避免一个任务失败影响其他任务。批量采集时控制请求频率避免对目标网站造成压力。9. 资源占用与性能观察方法这个项目不需要 GPU性能观察重点放在内存、CPU、进程和磁盘 I/O 上。9.1 内存占用Hadoop 伪分布式会启动多个 Java 进程正常情况下内存占用在 2GB 到 4GB 左右具体取决于配置。观察方法# 查看 Java 进程内存占用 jps ps aux | grep javaDjango 开发服务的 Python 进程内存占用通常在 100MB 到 300MB 之间属于正常范围。9.2 CPU 占用爬虫运行时会占用 CPU尤其是解析 HTML 和正则匹配阶段。批量采集时建议适当增加time.sleep()既降低对目标网站的压力也降低本机 CPU 负载。9.3 磁盘占用Hadoop 数据目录会随采集量增长需要定期查看df -h hdfs dfs -du -h /news/data如果数据量增长过快可以清理 HDFS 中的历史数据或增加数据保留策略。9.4 性能优化建议爬虫使用requests.Session()复用连接池。HTML 解析用lxml解析器比默认解析器更快。Django 查询使用select_related和only()减少数据库压力。数据量大时Hive 查询改用分区表。Web 端启用 Django 缓存减少重复查询。# 示例Django 查询优化 news_list News.objects.only( id, title, source, publish_time, category ).order_by(-publish_time)[:50]10. 常见问题与排查方法整理一下这类项目最常见的几个坑和解法。问题现象可能原因排查方式解决方案pip install安装依赖失败Python 版本不匹配或网络问题查看错误日志确认依赖名使用国内镜像源或切换 Python 版本Django 启动报ModuleNotFoundError依赖包未安装或虚拟环境未激活检查虚拟环境是否激活重新安装依赖确认在虚拟环境内执行命令Hadoop 无法启动jps看不到 NameNodeJAVA_HOME 配置错误执行echo $JAVA_HOME确认修正环境变量重新加载配置hdfs dfs -put上传报权限错误目录权限不足hdfs dfs -ls /查看权限执行hdfs dfs -chmod -R 777 /news爬虫抓取不到数据页面结构变化或网站反爬手动打开目标网页检查更新解析规则调整请求头CSV 中文乱码文件编码问题查看文件编码写入时指定encodingutf-8-sigDjango 页面加载慢数据库查询量大或未分页检查 SQL 查询耗时添加分页、缓存和索引搜索中文关键词无结果数据库字符集问题检查数据库编码统一使用 utf-8mb4 字符集端口冲突Django 启动失败8000 端口被占用netstat -ano | findstr 8000更换端口python manage.py runserver 8001Hive 查询报Table not found外部表路径不对检查LOCATION路径确认 HDFS 目录中存在数据文件10.1 数据库迁移报错排查# 删除数据库和迁移记录重新迁移 python manage.py migrate news zero python manage.py makemigrations news python manage.py migrate news10.2 爬虫请求被拒绝排查检查目标网站 robots.txt确认是否允许爬取。调整请求头使用完整的浏览器 User-Agent。增加请求间隔避免短时间高频访问。使用代理前必须确认合法合规。11. 最佳实践与使用建议项目跑通只是第一步真正让毕设拿高分靠的是工程化细节。11.1 项目目录结构规范建议按以下结构组织项目news-aggregation-platform/ ├── manage.py ├── requirements.txt ├── README.md ├── news/ # Django 应用 │ ├── models.py │ ├── views.py │ ├── urls.py │ ├── serializers.py │ └── admin.py ├── spider/ # 爬虫模块 │ ├── config.py │ ├── run_spider.py │ ├── cleaners.py │ └── utils.py ├── data/ # 数据输出目录 │ └── csv/ ├── hadoop/ # Hadoop 相关脚本 │ ├── hdfs_upload.sh │ └── hive_query.sql └── docs/ # 文档报告 ├── 开题报告.md ├── 需求分析.md └── 答辩PPT.md11.2 代码规范爬虫、Django、Hadoop 操作分别写在独立模块中不要混在一个文件里。所有外部 URL 和配置项集中放在配置文件便于维护。重要接口和函数添加 docstring。数据处理的中间结果输出到日志方便排查。11.3 日志与监控给爬虫模块加日志import logging logging.basicConfig( filenamelogs/spider.log, levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s ) def crawl_single_page(url): logging.info(f开始抓取: {url}) try: # 爬虫逻辑 logging.info(f成功抓取: {url}) except Exception as e: logging.error(f抓取失败: {url}, 原因: {e})11.4 版权和数据合规提醒这是毕业设计必须注意的部分。爬虫采集的数据仅用于学习、实验和课程展示。不使用爬虫采集个人隐私数据。不绕过目标网站的技术保护措施。如果项目后续商用或公开发布必须获得数据版权授权。毕业论文中要写清楚数据来源和合规边界。涉及用户数据时做好脱敏处理。11.5 答辩演示准备准备一套最小数据集避免演示时网络或目标网站出现问题。提前录制备用演示视频防止现场环境故障。Hadoop 环境提前启动不要等答辩时再初始化。核心代码提前标注重难点方便讲解。准备 3~5 个可能会被问到的问题例如“为什么引入 Hadoop”“数据如何保证一致性”“爬虫如何应对反爬”。12. 总结与下一步这个项目最值得尝试的点在于一份代码同时覆盖了 Python 爬虫、Hadoop 大数据、Django Web 开发三条完整技术线。对于毕设而言技术广度足够难点适中答辩时每个模块都能展开讲。如果你决定做这个题目第一步先别急着写代码先把数据流跑通手动采集几条数据 - 上传 HDFS - 在 Django 页面展示。链路通了再逐步丰富功能。最容易踩的坑集中在 Hadoop 环境配置和爬虫解析规则上这两个地方提前花时间后面会顺利很多。后续可以考虑的扩展方向爬虫框架从 Requests 升级为 Scrapy支持分布式采集。引入 Redis 做爬虫 URL 去重和任务队列。用 Hive 做更完整的新闻热度分析。基于 Django REST Framework 做前后端分离。接入 Elasticsearch 提升搜索体验。增加用户注册登录、新闻收藏、评论互动等社区功能。部署到云服务器使用 Docker 管理环境依赖。对课程设计来说跑通基础功能就能过关对毕业设计来说做好架构设计、数据合规说明和工程化细节拿高分并不难。建议把本文提到的功能验证流程都实际操作一遍尤其是爬虫清洗、HDFS 文件查看、Django 搜索和 API 接口这几个点是答辩时最容易展示亮点的地方。
返回列表