尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

大数据爬虫+Hadoop新闻推荐系统毕设实战指南

大数据爬虫+Hadoop新闻推荐系统毕设实战指南 又到毕设选题季后台收到好几条私信问“大数据爬虫Hadoop新闻推荐系统”这个题目能不能做、怎么做。说实话这个题目在计算机、大数据专业里属于“经典款”——数据能拿到、技术栈够硬、算法有得讲、展示还好看但正因为选的人多开题报告和答辩PPT里千篇一律的东西也多。这篇博文不打算给你抄一份开题报告模板而是把这个题目从“为什么值得做”到“每一步怎么落地”拆开揉碎讲一遍。不管你是刚定题还没头绪还是已经写完了开题报告准备动手按这个思路走论文有数据支撑、系统有真实效果答辩时也不虚。1. 这个题目到底在做什么选题逻辑与开题报告切入点1.1 为什么“新闻推荐”是毕设的黄金题目先说选题逻辑。新闻推荐系统这个场景天然适合做毕设原因有四条。第一数据获取门槛低。新闻不像电商、社交数据那样涉及大量用户隐私公开的新闻源很多爬虫能采集到的数据量大且结构化程度高标题、正文、发布时间、分类、来源这些字段都很清晰。对毕设来说数据是项目的生命线数据好拿项目就成功了一半。第二技术栈覆盖全面。这个题目不是单一技术点而是一条完整链路爬虫采集数据、Hadoop做分布式的存储与离线计算、推荐算法做个性化排序、前端可视化做结果展示。这四个环节正好对应大数据专业核心课程的重点写进简历和论文都很有说服力。第三推荐效果可量化。推荐系统的好坏可以用准确率、召回率、覆盖率这些指标来评估不像有些管理系统只能截图摆功能。这意味着你可以在论文里写实验、画对比表格让答辩老师觉得你有做研究的思维。第四和大数据结合点自然。很多人做推荐系统只用MySQL加Python就搞定了但这和“大数据”沾不上边。新闻推荐恰好有合适的场景切入大数据——用户行为日志是典型的规模大、增长快的数据用HDFS存储原始日志、用MapReduce或Hive做离线统计逻辑顺畅不是硬凑技术。1.2 开题报告的核心板块和写作思路开题报告不是给你自己看的是给评审老师看的核心要解决三个问题你要做什么、为什么是你做、你怎么做出来。对照标准结构来说研究背景与意义这一块别从“随着互联网的发展”这种废话开始。直接写“信息过载”解释用户每天面对海量新闻却难以找到感兴趣的内容个性化推荐是缓解信息过载的主流方案然后落到本项目要构建一个从数据采集到推荐展示的完整系统。国内外研究现状要分两层。一层是推荐算法的发展从基于协同过滤的传统方法到基于深度学习的序列推荐简单提几篇经典文献即可另一层是新闻推荐的特殊性包括时效性强、冷启动严重、用户兴趣漂移等这些点会成为你后面设计算法时的依据。研究目标和内容建议拆成四个模块来写网络爬虫子系统、大数据存储与处理子系统、推荐引擎子系统、可视化展示子系统。每个模块用两到三句话描述功能和技术要点逻辑清楚老师一眼就能看到你工作量是够的。技术路线是开题报告的精华部分也是我整篇博文会重点展开的内容。一句话概括就是Python爬虫采集新闻和用户行为数据数据清洗后存入MySQL和HDFS用MapReduce或Hive完成离线统计和特征提取推荐引擎使用基于内容推荐与协同过滤的混合策略最终通过Flask加ECharts实现可视化展示。进度安排按教学周来写八到十二周的周期比较常见前三周完成爬虫与数据入库第四到六周完成Hadoop环境搭建和离线处理第七到九周完成推荐算法实现与调优第十到十一周做可视化与系统整合最后一到两周写论文和准备答辩。注意进度要留缓冲爬虫被反爬封IP、集群环境出问题都是常有的事。2. 技术选型为什么这么定从爬虫到Hadoop的完整链路2.1 爬虫层requests还是Scrapy单机还是分布式爬虫层的选型是很多人的第一个纠结。直接给结论验证阶段用requests加BeautifulSoup就够了模块简单、调试方便写个一两百行代码就能把数据跑起来。但如果你要采集的数据量大到几万条以上就得考虑Scrapy了。Scrapy的好处不只是爬得快更重要的是框架自带了很多生产级能力请求调度、并发控制、去重、中间件机制、Item Pipeline。比如你需要在爬虫里做IP切换、UA轮换Scrapy的Downloader Middleware就是干这个的。另一个实用功能是它的去重机制默认会对请求URL做指纹去重避免重复采集。那要不要上分布式爬虫我的建议是量力而行。真正意义上的分布式爬虫需要引入消息队列或者Redis做任务调度中心让多个爬虫节点协同工作这在毕设里通常是“过度设计”。除非你的开题报告明确写了“分布式爬虫”作为创新点否则用Scrapy加高并发配置完全可以应付几十万条级别的数据。关于并发设计——热搜词里也有“爬虫并发设计到底哪个好”这种纠结。我可以负责任地说对毕设场景线程池加请求队列是最平衡的方案。Python的concurrent.futures.ThreadPoolExecutor可以控制并发度在8到16之间每个线程绑定独立的Session既能提高采集效率又不至于因为并发太高触发反爬封禁。异步方案asyncio加aiohttp效率更高但写起来复杂调试成本不小非技术亮点没必要选它。2.2 存储与计算层Hadoop在项目里的真实定位每一届都有人问新闻推荐系统为什么非得用Hadoop我先说句实话如果只是做推荐算法demoMySQL完全够用Hadoop的加入是“数据规模”的宣言。Hadoop在你的系统里承担三个具体职责。第一HDFS作为原始数据存储层把采集到的新闻原始数据、用户行为日志以文件形式存一份这是“大数据”的底子。第二MapReduce或者Hive做离线计算比如统计新闻热度、生成用户行为特征矩阵这些计算量在数据量大时单机跑不动分布式计算引擎就有意义了。第三HDFS加上YARN的资源管理能力体现了分布式系统的运维和管理思维这在答辩时是实打实的加分点。版本和环境方面也有讲究。Hadoop比较坑的一点是生态组件版本兼容性我建议用Hadoop 3.3.x版本搭配JDK 8或JDK 11都比较稳妥。部署模式上如果只是为了跑通流程伪分布式模式在单机即可完成全部功能验证。要是实验室有三台以上机器搭一个一主两从的小集群更贴近生产环境写论文时也能写“本系统在由3个节点组成的高可用集群上完成部署测试”。Hive要不要用要。MapReduce写起来太痛苦了用Hive SQL做数据统计和分析效率高出一个数量级。常见的做法是数据从爬虫进入MySQL后定期导出到HDFS然后在Hive里建外部表直接用SQL做统计统计结果再导回MySQL供推荐引擎和前端调用。这个流程是工业界常见的“离线数仓”简化版论文里也有内容可写。2.3 推荐算法层为什么不要一上来就上深度学习新闻推荐场景下深度学习模型如DeepFM、DIN确实效果更好但毕设千万别一上来就奔着深度学习去。原因很现实深度学习模型需要大量标注数据做训练你的爬虫数据再大也就是几十万条新闻和几千个用户行为记录这个数据量训出来的模型效果大概率不如传统方法。而且深度学习调参是个无底洞你可能花两周时间在调embedding维度和学习率上最后效果还未必比协同过滤好。更稳妥的方案是混合推荐策略基于内容的推荐TF-IDF加重余弦相似度处理冷启动它不依赖用户历史行为新闻来了就能推基于物品的协同过滤ItemCF负责个性化利用用户点击、收藏、停留时间构造行为矩阵计算新闻之间的相似度再用热门推荐加时间衰减做补充保证推荐结果不会太死板。三种策略加权融合效果稳定、可解释性强论文里还能做对比实验比硬上深度学习实用多了。2.4 展示层Flask加ECharts为什么是标准答案可视化展示层用Flask加ECharts基本是标准答案。Flask轻量、灵活写几个路由就能提供推荐接口和页面渲染比Spring Boot简单几个量级。ECharts是百度开源的图表库功能全面社区模板多你甚至可以在网上找到现成的数据大屏模板改一改直接用。这里插一句热搜词里有“免费数据可视化大屏”确实是毕设的高频搜索需求。我的建议是大屏要重点突出“新闻实时采集量”“热度排行榜Top10”“频道分布”“推荐点击率”这几个核心指标不是把所有图表堆上去而是让老师一眼看到你系统里数据的流动和价值。3. 爬虫采集层数据从哪来、怎么采、怎么防封3.1 数据源选型与合规底线做新闻爬虫第一步是选数据源这一步很多人不重视导致后面被反爬搞到崩溃。我的建议是优先选两类站点一是提供公开RSS或API的新闻网站比如部分主流媒体都有RSS订阅源直接解析XML就能拿到结构化数据省去解析HTML的麻烦二是页面结构清晰、反爬策略相对温和的新闻门户站点的科技、财经、体育等频道页面。不要一上来就挑战那些反爬特别严格的平台你毕设期间没有那么多时间跟它的安全策略周旋。合规问题必须单独强调。爬虫做毕设只用于学习和研究目的一定要遵守目标网站的robots协议控制采集频率不对目标服务器造成压力。不采集个人隐私数据不涉及用户非公开信息。作为技术学习者懂技术更要懂得技术使用的边界这是工程素养的一部分。3.2 数据表设计从“能跑”到“好查”爬虫采集到的数据结构化程度直接决定后面推荐引擎的代码难度。建议字段设计如下新闻表news_id主键、title、content、category、source、url唯一索引、publish_time、crawl_time、keywords可选。用户行为表behavior_id、user_id、news_id、behavior_typeclick/favorite/dwell、dwell_time停留秒数、create_time。用户表user_id、username、password、preferred_categories可选、register_time。实际采集时一个容易忽略的坑是URL去重。很多新闻站点的详情页URL中带时间戳或文章ID同一篇新闻可能被多个栏目页重复收录。除了对URL做唯一约束我建议对标题做MD5哈希后也加一个唯一约束双保险去重。别问我怎么知道的第一版爬虫入库十万条数据里有三千多条重复清洗起来特别痛苦。3.3 并发与反爬的实战细节先聊UA和请求头。第一次写爬虫的人经常会忽略这点用默认的Python-requests UA去请求基本必被拦截。至少要伪装一个完整的浏览器请求头包括User-Agent、Accept、Accept-Language、Referer。UA需要轮换最好准备一个UA池每次请求随机取一个。再聊请求频率。很多新闻站的反爬策略是“单IP单位时间内请求次数阈值”所以控制请求间隔是核心。我会用随机延时函数每次请求前sleep 2到5秒随机值这样既有一定效率又不会形成明显的访问规律。这里不要为了追求速度而把延时设得太短对毕设来说数据总量不大慢一点完全能接受。如果遇到IP被封怎么办常规思路是引入代理池通过代理IP池轮换出口IP。但我要提醒你公开的免费代理池稳定性较差经常有失效IP需要花时间维护。一个性价比更高的做法是先用降低频率、更换UA、加入Cookie这三级方案如果还是被拦截再考虑代理池方案。用requests写一个带重试机制的采集模块核心逻辑是定义max_retries请求失败时捕获异常sleep一段时间后重试连续失败超过阈值就记录到日志并跳过该URL。这些细节代码量不多但能极大提升你爬虫的健壮性。3.4 新闻正文提取别小看这个“脏活累活”正文提取是爬虫里最容易被低估的环节。很多人爬下来才发现页面里全是导航、相关推荐、广告、页脚这些噪声真正的正文反而藏在某个div标签的深层位置。常规做法是用XPath或CSS选择器精确定位正文节点。但不同新闻站点的页面结构不同甚至同一个站点的不同栏目页面结构也可能有差异写死选择器的代码往往几周后就会失效。一个比较可靠的方案是对每个数据源单独写一个解析器把解析规则集中管理然后在Pipeline里统一做清洗——去掉多余的标签、提取纯文本、过滤过短的无效内容。如果你不想针对每个站点单独适配可以考虑用一版正文抽取算法基于文本密度和标点符号分布来自动识别正文区域。这个方法不需要针对站点定制通用性更强对毕设来说是性价比很高的选择。4. Hadoop存储与离线处理集群怎么搭、数据怎么算4.1 环境搭建从伪分布式到三节点集群的路径Hadoop环境搭建是大数据毕设的第一道坎很多人在这里折腾一周还没跑通。先说结论如果没有现成集群先用伪分布式模式跑通整个流程后面再根据机器资源决定要不要扩展到多节点。伪分布式部署核心步骤是五个安装JDK并配置JAVA_HOME下载Hadoop安装包并解压配置core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml四个配置文件设置HDFS NameNode的hostname映射和SSH免密登录然后格式化NameNode启动HDFS和YARN进程。这里提醒几个高频坑点。第一个是hostname配置问题NameNode和DataNode之间通过主机名通信必须在/etc/hosts中配置好映射否则会出现DataNode启动后又自动退出的诡异问题。第二个是内存配置默认的NameNode堆内存设置过低数据量稍大就可能OOM建议在hadoop-env.sh中把HADOOP_HEAPSIZE调整到1G以上。第三个是集群节点时间同步问题多节点环境下节点时间不一致会导致各种诡异错误用NTP同步一下就好。从伪分布式升级到三节点集群逻辑上不复杂一台机器做NameNode加ResourceManager另外两台做DataNode加NodeManager把配置文件分发过去即可。但你要做好心理准备集群环境的问题排查复杂度比单机高不少一旦DataNode起不来第一件事去翻日志文件不要瞎猜。4.2 HDFS目录规划和数据接入HDFS上的目录结构要提前规划否则数据一多就乱了。我自己习惯这样分/news/raw存放爬虫采集的原始新闻数据按日期分目录/news/etl存放清洗后的结构化数据/news/result存放离线分析的结果输出。数据接入HDFS的路径也有讲究。常见方案是爬虫数据先存入MySQL然后定期用Sqoop把数据从MySQL导入HDFS这是最“正统”的做法。但Sqoop配置也需要一定工作量。对毕设来说有一个更轻量的替代方案爬虫直接输出为CSV或JSON格式的日志文件落盘到本地目录再用hdfs dfs -put命令手动或写脚本上传。如果你想让系统显得更“大数据”可以加一个Flume组件监控爬虫日志目录配置一个sink把数据实时写入HDFS。Flume是日志采集的标准组件配置不算复杂而且能在论文里多写一小节“数据采集与传输”。4.3 MapReduce和Hive离线统计怎么算Hive在毕设里承担最重的离线计算任务。建表语句其实不复杂举例来说CREATE EXTERNAL TABLE IF NOT EXISTS news_behavior ( behavior_id STRING, user_id STRING, news_id STRING, behavior_type STRING, dwell_time INT, create_time TIMESTAMP ) ROW FORMAT DELIMITED FIELDS TERMINATED BY , STORED AS TEXTFILE LOCATION /news/behavior;一个典型需求是统计新闻热度。简单做法是以news_id为维度统计点击量、收藏量结合文章的发布时间算一个热度分。Hive SQL写起来非常直接SELECT news_id, COUNT(*) AS total_clicks, SUM(CASE WHEN behavior_typefavorite THEN 1 ELSE 0 END) AS favorite_cnt FROM news_behavior GROUP BY news_id;MapReduce的位置放在哪我的建议是能用Hive SQL解决的都用SQLMapReduce集中在两个场景——一是复杂的数据清洗ETL二是论文里需要展示MapReduce编程能力的部分。比如你可以用MapReduce实现一个面向新闻正文的词频统计任务统计每个分类下出现频率最高的关键词这个结果直接用于基于内容的推荐特征提取。这样既展示了MapReduce编码能力又和推荐系统主线功能挂钩不是为写而写。一个容易被忽略的是小文件问题。爬虫产生的数据文件往往小而多而HDFS适合存大文件大量小文件会严重消耗NameNode内存。解决方法是定期用Hive的INSERT OVERWRITE将小文件合并成大文件或者在上传前先合并一次。这块在论文的性能优化小节里很加分。5. 推荐引擎实现从TF-IDF到协同过滤的落地细节5.1 文本向量化中文分词的坑与解法基于内容的推荐第一步是文本向量化对中文来说绕不开分词。jieba是Python生态里最成熟的中文分词库支持精确模式、全模式和搜索引擎模式还有自定义词典功能。新闻推荐场景下我建议分词加词性过滤只保留名词、动词、形容词等有实际意义的词去掉停用词比如“的、了、吗、啊、在”这类高频无意义词。TF-IDF的计算可以用scikit-learn的TfidfVectorizer实现但要注意它默认不支持中文分词需要配合jieba先做分词再用空格连接后传入。代码大致思路是import jieba from sklearn.feature_extraction.text import TfidfVectorizer def tokenize(text): return .join(jieba.lcut(text)) corpus [tokenize(item[content]) for item in news_list] vectorizer TfidfVectorizer() tfidf_matrix vectorizer.fit_transform(corpus)分词质量直接决定推荐效果。如果你发现某些新闻领域专有名词被错误切分解决办法是往jieba的自定义词典里加词。比如做财经新闻推荐就把“量化宽松”“逆回购”“创业板”这些词加进去分词的准确率会明显提升。5.2 基于内容的推荐用户画像怎么构建基于内容的推荐核心逻辑是“给用户推荐和他看过的最像的新闻”。因此需要两套向量新闻的向量上一节已经算好和用户画像向量。用户画像向量的构建有两种思路。简单办法是把用户历史点击过的N篇新闻的向量做平均得到的向量就代表用户兴趣中心。加权平均效果更好——离当前时间越近的点击权重越高收藏行为比普通点击权重更高停留时间长的比秒关页面的权重高。推荐时计算用户画像向量与所有新闻向量的余弦相似度返回TopN。注意一个效率问题如果你的新闻量有几十万篇实时计算全量相似度会很慢。一个可行优化是先用分类粗筛只在用户最感兴趣的类别内部做细粒度的相似度计算把计算量降一个数量级。5.3 ItemCF协同过滤构造用户行为矩阵协同过滤走的是另一条路——不分析文本内容只分析行为数据核心假设是“对同一篇新闻有点击行为的用户兴趣相似”。ItemCF的实现要点分三步。第一步构造用户-新闻行为矩阵不同行为类型映射为不同分值。参考映射点击1分、收藏3分、停留超过30秒加1分。第二步计算物品相似度常用余弦相似度或者更简单的共现矩阵即“被同一用户点击过的新闻对”的共现次数越高两篇新闻越相似。第三步给用户推荐时从他有过行为的新闻出发找出最相似的K篇新闻再按相似度加权得分排序。这里有个毕设必踩的坑数据稀疏。如果你的用户只有几十个每个用户行为只有十几条共现矩阵会非常稀疏相似度算出来全是0。对策有两个一是造一批模拟用户行为数据这是毕设里常见的做法需要说明数据是通过模拟生成的二是把ItemCF和基于内容的推荐做加权融合稀疏时内容推荐顶上来保证推荐结果不会空。5.4 冷启动问题新用户和新新闻怎么办冷启动是新闻推荐系统里绕不开的问题也是答辩老师最喜欢问的点。新用户没有任何行为记录协同过滤完全失效内容推荐也没有画像可用新新闻刚发布没有任何用户行为ItemCF的相似度计算也失效。三板斧解决。第一板斧是热门推荐把最近24小时内热度最高的新闻推给新用户热度公式可以设计为点击量、收藏量、时间衰减因子的组合规则透明、效果好。第二板斧是“注册时选兴趣”让新用户注册时勾选感兴趣的分类直接初始化用户画像向量内容推荐立刻可用。第三板斧是探索机制在推荐结果里随机掺入少量非用户兴趣分类的热门新闻用于收集新用户的行为反馈为后续推荐提供信号。考虑到实际推荐效果混合推荐的权重分配可以参考这个思路有历史行为的用户内容推荐占0.4、ItemCF占0.4、热门占0.2新用户热门占0.6、兴趣分类内容推荐占0.4。后续可根据评测结果微调。评估指标上毕设主要是三类准确率推荐结果中用户真正点击的比例、召回率用户点击的新闻里被推荐出来的比例、覆盖率推荐结果覆盖了多少比例的新闻。离线评测时把行为数据按时间切分前80%训练、后20%测试跑通这个流程论文实验部分的内容就扎实了。6. 可视化展示与系统集成让结果看得见6.1 系统分层与数据流转从架构视角看整个系统是标准的分层数据流采集层产出原始数据存储层承载数据计算层产出特征和指标推荐层生成个性化结果展示层呈现数据价值和推荐效果。具体代码工程怎么组织我建议用Flask做后端提供三类接口用户接口注册登录、兴趣选择、推荐接口接收用户ID返回推荐列表、数据接口返回可视化大屏需要的统计数据。前端页面包括登录注册页、推荐列表页、可视化大屏页。推荐接口的典型调用逻辑是前端发送用户ID到后端后端根据用户画像和协同过滤结果生成候选集融合热门新闻后打分排序截取TopN返回同时记录这次推荐的曝光日志为后续评测积累数据。这条链路完整性很重要——从推荐到曝光到点击形成闭环才能评估推荐效果。6.2 ECharts大屏的布局与数据对接可视化大屏不需要做得特别花哨但要让评委一眼看出“这是个大数据系统”。核心指标建议展示四个方面。第一部分是全局概览用数字卡片展示新闻总量、今日新增、用户总数、累计行为记录数这些数字是直接从汇总表统计而来。第二部分是趋势分析用折线图展示近七天的新闻采集量和用户活跃度变化。第三部分是热度排行用横向柱状图展示当前最热门的10条新闻。第四部分是分类分布用饼图或南丁格尔玫瑰图展示不同频道新闻的数量占比再用词云展示整体热门关键词。前端与后端的对接方式不复杂ECharts通过Ajax请求后端的JSON数据格式约定好即可。注意大屏页面建议做成自适应布局答辩时如果用不同分辨率的投影仪或屏幕不会出现布局错乱的问题。7. 毕设实战避坑手册高频问题与排查思路7.1 爬虫与数据处理高频问题问题典型表现排查思路请求被拒返回403或跳转验证页检查UA和Cookie增加随机延时轮换IP中文乱码页面标题和正文全是乱码请求时指定正确的编码常见的有UTF-8和GBK用requests的apparent_encoding自动检测抓取内容为空正文字段为空字符串页面可能是动态渲染数据通过JS异步加载用Selenium或找页面的公开API接口替代直接解析HTMLMySQL入库乱码中文数据入库后显示问号数据库连接参数指定charsetutf8mb4库表字符集统一为utf8mb4重复数据同一篇新闻入库多次对URL和标题MD5加唯一约束入库前先查重关于编码问题多说一句这是爬虫新手的高频翻车点。requests库默认会猜测网页编码有时候猜不准。你可以直接读取响应头里的charset参数如果还是不对就用apparent_encoding做兜底。7.2 Hadoop环境高频问题问题典型表现排查思路NameNode启动失败格式化后无法启动检查hdfs-site.xml的dfs.namenode.name.dir目录权限清空临时目录重新格式化DataNode反复退出启动后几秒钟自动挂掉检查hostname映射和DataNode的日志重点看是否有连接NameNode失败的异常内存溢出YARN任务执行失败日志报OOM调大HADOOP_HEAPSIZE减少同时运行的容器数量降低每个容器的内存需求节点时间不同步集群操作偶发异常所有节点配置NTP时间同步服务数据倾斜部分Map任务执行特别慢检查Key分布是否均匀对倾斜Key做加盐处理或者改用Hive的SALR方法Hadoop问题排查有个通用原则日志是第一线索不要靠猜。遇到环境问题先找到对应组件的日志目录打开日志文件搜ERROR、WARN关键字一半的问题都能立刻定位。7.3 推荐效果不理想的排查思路推荐效果不好很多人第一反应是“换个更高级的算法”但大多数时候问题根本不在算法上。先检查数据问题。用户行为数据太少、行为分布不均匀、新闻内容质量参差都会让推荐结果偏颇。模拟用户行为数据时不要偷懒只生成几十条建议至少生成几百个用户的几千条行为记录分布上要体现真实场景的特性——少数热门新闻被大量点击大量长尾新闻只有零星点击。再检查特征问题。TF-IDF的向量是不是有问题分词是否准确停用词表是否合适推荐结果不稳定先打印出几篇被推荐的新闻和用户历史点击新闻的关键词肉眼比对一下看语义上是否真的相关。最后检查融合权重。协同过滤和内容推荐的加权融合中权重需要调参实验。一个可行的做法是网格搜索在验证集上跑几组权重组合选准确率最高的一组。调试过程记录下来论文里写实验分析时直接可用。写在最后的经验之谈这个题目做完我的最大体会是毕设项目的价值不在于技术多前沿、功能多花哨而在于整条链路是否能闭环跑通以及每一个环节你是否真的想明白了“为什么这么做”。爬虫为什么选Scrapy不选requestsHadoop在这里解决什么问题协同过滤为什么在数据稀疏时效果差这些问题都是答辩时的必考题也是你真正学到东西的地方。最后再分享一个小技巧每完成一个模块就截图、记录数据结果、更新到毕设文档里。不要等最后一两周才补文档到时候你会发现自己已经忘了第一版爬虫的细节和各种改动原因。边做边记录论文的素材和系统本身会一起成熟起来。
返回列表