【Python大数据期末/课程设计】动态爬取“纵横中文网“小说排行榜数据并进行可视化处理 (flask框架/MySQL数据库/echarts数据可视化)

代写C语言、C++、Java、Python、HTML、JavaScript、vue、MySQL相关编程作业,
长期接单,信誉有保证,标价10-20每份,如有需要请加文章最下方QQ。

本文资源:https://download.csdn.net/download/weixin_47040861/89149396


1.题目要求

题目描述:

爬取“纵横中文网”
1.利用爬虫技术爬取完整的一千条数据.
2.将爬取到的数据保件存到MySQL数据库中
3.利用python web 任意框架做后台api
4.利用js等技术动态渲染到HTML中
5.最少要有4个子页面
6.每个页面最少3个版块
7.所编写的页面必须符合W3C标准和人为审美标准

2.视频演示

【Python大数据期末/课程设计】动态爬取"纵横中文网"小说排行榜数据并进行可视化处理 (flask框架/MySQL数据库/echarts数据可视化)

3.实现流程

注意:该项目需要依靠MySQL数据库运行,请保证您的电脑中已安装了MySQL数据库且正常可用

该项目的主要目标是爬取小说网站"纵横中文网"的排行榜数据,然后对数据进行可视化处理

目标网站:小说排行榜,最新热门小说排行榜,各类原创小说排行榜,纵横中文小说网

项目的基本流程如下:创建flask服务器->向目标页面发送请求,爬取数据->在数据库中建表,将爬取到的数据处理后保存到数据库中->编写接口,响应前端发送的请求->编写前端请求,通过后端服务器获取数据->将数据渲染到页面中

1.创建服务器

接下来是每一步的实现过程以及项目的基本结构,

首先是创建服务器,在项目目录下有三个Python文件,其中"create_flask.py"文件是服务器相关文件,与flask相关的代码基本都在这个文件中,双击该文件后点击运行即可启动项目

2.请求数据

然后是请求数据,首先在"creat_flask.py"文件的头部有一个变量account,该参数中保存了MySQL数据库的账号、密码以及地址,启动项目前请先将该变量中的值修改为您自己的账号和密码

“create_flask.py”文件头部的account对象:

由于服务器每次启动后最先访问的都是初始路径,即路由"/",所以我将爬取和保存数据的函数都放在了该路由下,每当用户访问路由时会先爬取数据,爬取完成后再显示页面:

初始路径下的函数:

其中请求函数全部保存在"get_info.py"文件中,由于不同排行榜的请求方式略有不同,所以分成了5个函数,函数接收保存着数据库账号和密码的参数account,函数内部的url变量和header变量保存的则是数据请求地址和请求头

"get_info.py"文件中的请求函数:

然后项目会使用Python的requests库提供的方法向页面发送请求,若请求成功(res.status_code==200)则调用建表函数,并将获取到的数据传递给函数以便存储:


 

2.保存数据

想要保存数据,首先要在数据库中创建对应的表,然后将数据插入到表中,这里我将建表和插入函数整合到了一起,所有的建表和保存数据函数均在“create_list.py”文件中,函数接收两个参数,分别为数据库数据相关数据和爬取到的数据,当调用该函数时,函数首先会根据传入的数据库数据与后台数据库建立连接:

然后检查当前数据库中是否存在对应的表,若存在则清空,若不存在则创建,这一步的主要目的是为了方便更新数据库内容:

最后Python的"mysql.connector"库提供了一个非常方便的函数executemany,该函数可以通过传入的执行命令格式和数据批量向数据库中插入数据,而不需要逐个插入:

然后将操作提交给数据库即可完成数据的保存,保存结果如下:

该项目一共爬取了五个排行榜,每个排行榜200条数据,共1000条数据

3.建立接口

完成数据的保存后,下一步就需要编写路由接口来连接数据库与前端页面,这里我们回到"create_flask.py"文件中,在数据读取和保存完成后我设置了路由从"/"跳转至"/monthly",本质上是将月票页面当做主页使用:

在该项目中使用的返回函数主要有两个,一个是返回页面的render_template()函数,另一个则是返回数据的jsonify()函数,接下来我来讲讲这两个路由函数的作用:

首先是render_template()函数,该函数用于向前端返回页面,这里需要说明的是,在flask框架中前端页面并不是直接渲染的,而是前端页面通过访问后端路由,由路由返回给前端页面的,例如这里的monthly页面,在网页中输入后缀带monthly的路径时会向后端对应的"/montlhy"路由请求页面内容,路由再利用render_template()函数在当前目录下的"templates"文件中找到对应的HTML页面并返回给前端

而数据也是相同的流程,区别在于数据需要在JavaScript文件中通过XMLHttpRequest()向后端发送请求,请求到的数据并不会直接渲染到页面,而是返回到JavaScript文件中:

不同的数据需哟的接口也是不同的

4.编写请求

在建立好后端接口后,下一步就是在前端发送请求以获取数据,由于一个页面中使用的数据不止一个,而数据的请求之间会有执行冲突,所以这里使用了promise来异步发送请求,以确保请求间不会冲突,

// 封装一个函数用于发送异步请求并返回 Promise 对象
function fetchData(url) {
    return new Promise(function (resolve, reject) {
        var xhr = new XMLHttpRequest();
        xhr.open('GET', url, true);
        xhr.onload = function () {
            if (xhr.status >= 200 && xhr.status < 300) {
                var data = JSON.parse(xhr.responseText);
                resolve(data); // 请求成功,返回数据
            } else {
                reject(xhr.statusText); // 请求失败,返回错误信息
            }
        };
        xhr.onerror = function () {
            reject(xhr.statusText); // 请求错误,返回错误信息
        };
        xhr.send();
    });
}

5.渲染页面

前端在获取数据后将数据传递给echarts函数,然后渲染到页面中:

项目共渲染了6个页面,5个榜单页面和1个总页面,

在榜单页面中鼠标悬停在饼图上时会显示数据量和饼图所占百分比:

而总页面中展示了各榜单的部分统计数据:

↓如对项目有任何问题或需要,请加下方QQ↓

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a辰龙a

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值