# 利用爬虫进行小说网站数据分析 **Repository Path**: markchen7788/big_data ## Basic Information - **Project Name**: 利用爬虫进行小说网站数据分析 - **Description**: 利用爬虫、数据分析和挖掘相关方法进行小说网站的“小说分类”数据分析 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 15 - **Forks**: 2 - **Created**: 2020-11-20 - **Last Updated**: 2025-03-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 利用爬虫进行小说网站数据分析 #### 介绍 利用爬虫、数据分析和挖掘相关方法进行小说网站的“小说分类”数据分析 #### 软件架构 1. Javaweb前端负责显示 2. Javaweb后端负责处理请求,访问数据库 * controller层 负责处理请求 * service层 负责业务逻辑处理与数据分析 * dao层 负责数据库访问 * bean层 数据库数据模型 3. 数据爬取和数据清洗使用python脚本完成 #### 安装教程 1. 项目主体用SpringBoot(eclipse)完成,按照相应方式部署主体即可; 2. python脚本依赖包 * 爬虫:requests、beautifulsoup * 数据持久化:pymysql * 数据清洗:pandas * 在Anaconda版本的python中,上述包除pymysql基本都会有,无需另外安装 #### 项目需求分析 1. 系统主要目的 * 系统的用户主要是新入行的网络小说作者。 * 系统可以给用户推荐: * 当前比较流行的网络小说类型; * 各种类型小说所适合发表的网站; * 及各种类型小说所适合的篇幅。 * 系统主要反映的数据: * “各种类型网络小说总量在全网、及各站的情况” * “各种类型网络小说热度(点击量、打赏、票等等)在全网、及各站的情况” * “全网各种类型网络小说的篇幅与其热度的关系。” * 特别说明:系统只爬取“起点”、“晋江”、“飞卢”三个网站作为示例。 2. 系统应该完成的具体内容: * 数据的获取: * 用爬虫获取三个网站的数据(详细数据格式参见数据库格式) * 数据的清洗: * 处理重复的、不完整的、异常的数据 * 将三个网站的数据的格式统一 * 数据持久化存储 * 数据分析: * “各种类型网络小说总量在全网、及各站的情况” * 获取各类总量并用饼状图显示。 * 变量一:小说类型 * 变量二:对应总量 * “各种类型网络小说热度(点击量、打赏、票等等)在全网、及各站的情况” * 获取各类对应的热度(点击量、打赏、票等等)并用直方图显示 * 横坐标:小说类型 * 纵坐标:对应热度 * “全网各种类型网络小说的篇幅与其热度的关系。” * 数据挖掘: * 推荐全网热度最高的小说类型; * 推荐各站热度最高的小说类型; * 推荐各类小说适合发表的网站; * 推荐各类小说适合的篇幅; * 数据的显示: * 显示平台:Java Web * 结果列表: * 全网及各站的分类热度排名 * 各种类型小说所适合发表的网站 * 各种类型小说所适合的篇幅 * 其它: * 散点图: * 先选择网站,再选择分类,将此网站该分类下的所有小说显示,每个小说相当于一个点,从而拟合出曲线或聚点。在后端处理时,要将只有几千字就弃坑了的那种小说筛掉。纵坐标要能够选择显示内容,如起点只能选择推荐票,飞卢可以选择鲜花、点击数、打赏、月票,晋江为积分、礼物、收藏数、书评数 * 直方图 * 选择网站,动态生成该网站每个分类的热度,分类的热度由特定算法实现,热度应当与字数成反比,而与成绩性质数据成正比。 * 饼状图 * 选择小说类型,生成各个网站在此分类小说的市场占有量,不只是数量,与字数、人气等也要相关。 * 输入作者名,获得此作者所有小说加起来的各种数据。 #### 本人参与贡献 1. 飞卢网爬虫 * 主要用requests.get()获取网页源代码; * 根据网页内容对应标签的CSS选择器,利用beautifulsoup抽取其文本内容 * 用pymysql持久化数据 2. 数据清洗 * pandas、pymysql读取数据库内容; * pandas提供了很友好的方法进行数据清洗; * 清洗好数据再次持久化数据 * 数据清洗在数据库中用sql语句完成也是可以的,个人觉得python更加好处理所以采取了这种方法; * 如何将类似“30万”这样的数据转换成“300000”? * 当时忘记处理这样的数据,后来同伴想出了这样一条很简洁的sql语句帮我解决了这个问题: >update novel set dashang = (left(dashang,(CHAR_LENGTH(dashang) - 1)))*10000 WHERE dashang like '%万' 3. 用python画散点图 * 在探究小说字数和其点击量的关系时,以点击量为纵坐标,字数为横坐标,将所有书籍以点的形式标在图中,画出散点图; * 主要用到matlabplot库画图,很方便美观; * 最后的项目成品中,程序可以根据散点图拟合出对应曲线,显示字数与点击量的关系。 #### 其它 * 更多详情参见本人[实践文档](./实践文档.pdf) * 程序可运行、可部署jar包见[jar包.zip](./jar包.zip)中项目的target目录 * 先前上传的一些项目缺少一些必要springboot插件和配置,无法生成正确的jar包,静态文件的打包也花费了我很长的时间; * 本次项目的配置符合生成jar包的要求,调用`maven clean` 和 `maven install`即可生成jar包; * 服务器或是本地皆可利用`java -jar`命令运行,linux服务器可用`nohup &`命令让程序后台执行;