一、前言
在当今社会,舆情监控越来越被重视。随着互联网技术的发展,我们从传统媒体渠道、官方报告、调查问卷等方式搜集到的舆情信息,逐渐被网络上的内容所替代。因为网络上的内容传播速度快、及时性强、覆盖范围广,成为了管理者、企业、政府等了解社会大众情绪、掌握市场动向的重要途径。

本文介绍如何基于Flask框架,使用Python语言编写一个高校舆情分析,舆情监控可视化系统。下面主要涉及5个方面:

1.如何使用Python爬取舆情数据;
2.如何通过代理IP提高数据爬取效率;
3.如何使用Flask框架实现舆情监控可视化系统;
4.如何使用MongoDB存储数据;
5.如何使用ECharts实现数据可视化展示。

二、使用Python爬取舆情数据
爬取舆情数据主要有两种方式,一种是直接使用API接口,通过调用API获取相应的数据。另一种方式是使用Python爬取网站上的数据。

本文介绍的是第二种数据获取方式,以爬取中国大学排名网为例。

1.安装requests库

使用Python爬取网站数据,首先需要安装requests库,requests库是Python中的HTTP客户端库,能够模拟HTTP请求,发送请求、接收响应。使用以下命令进行安装:

```python
!pip install requests
```

2.分析数据

在爬取数据前,我们需要分析数据。打开中国大学排名网,点击“大学排名”->“全球排名”,网站链接为:http://www.zuihaodaxue.com/ARWU2020.html 。

从网站中我们可以看到展示的数据大致如下:

我们需要获取的数据列为“排名”、“学校名称”、“所在地区”、“总分”。

3.爬取数据

分析完数据之后,我们就可以开始爬取数据。首先,我们需要导入requests库、BeautifulSoup库。

```python
import requests
from bs4 import BeautifulSoup
```

接着,我们需要设置请求头和请求参数,这里我们设置如下:

```python
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
params = {
    'from': 'hao360',
    'ie': 'utf-8',
    'query': 'python'}
```

其中,headers为请求头,用于告诉服务器我们的身份信息,params为请求参数,表示要搜索“python”关键词。

接着,我们使用requests库发送请求,获取网页内容,并解析所需的数据。

```python
url = 'http://www.zuihaodaxue.com/ARWU2020.html'

response = requests.get(url, headers=headers)
response.encoding = response.apparent_encoding

soup = BeautifulSoup(response.text, 'html.parser')

all_university = soup.findAll('tr', {'class': 'bgfd'})
for university in all_university:
    rank = university.find('td', {'align': 'center'}).getText()
    name = university.find('a').getText()
    region = university.find('div', {'style': 'padding-left:10px;'}).getText().strip()
    score = university.findAll('td', {'align': 'center'})[-1].getText()
    print(rank, name, region, score)
```

这样,我们就可以获取到所有大学的排名、学校名称、所在地区、总分数据。

不过需要注意,如果直接爬取网站,可能会被封IP,下一节会介绍如何通过代理IP提高数据爬取效率。

三、通过代理IP提高数据爬取效率

当我们爬取数据时,如果频繁访问同一个网站,可能会被检测到,从而导致IP被封,无法正常访问。这时候,我们可以使用代理IP来避免这个问题,使用代理IP进行数据爬取,可以更好地保护我们的真实IP,达到更好的效果。

1.获取代理IP

在互联网上有很多代理IP提供商,我们可以通过购买代理IP解决被封IP的问题。这里,我们使用的是免费的站大爷代理ip(https://www.zdaye.com/)提供的免费IP。

在站大爷代理网站上,我们可以获得如下信息:

- IP地址
- 端口号
- 区域
- 匿名度
- 类型
- 存活时间
- 验证时间

我们需要使用的是IP地址和端口号,将它们加入到请求头中,即可使用代理IP进行数据爬取。

2.使用代理IP

使用代理IP的方式非常简单,只需要将代理IP加入到请求头中即可。例如,以下代码使用站大爷代理提供的代理IP进行数据爬取:

```python
import requests

url = 'http://www.zuihaodaxue.com/ARWU2020.html'

proxies = {'http': 'http://111.177.190.36:9999', 'https': 'https://111.177.190.36:9999'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}

response = requests.get(url, headers=headers, proxies=proxies)

print(response.text)
```

这里我们设置了一个代理IP,格式为http://IP:port。在发送请求时,通过proxies参数将代理IP加入到请求头中,即可使用代理IP进行数据爬取。

四、使用Flask框架实现舆情监控可视化系统

Flask是一个轻量级的Python Web框架,用于编写基于Web的应用程序。它非常适合小型应用程序和简单的Web服务,同时也可以作为基于大型应用程序的核心。

Flask框架包含了请求分发、模板渲染、数据存取等功能,非常适合开发Web应用程序和API。

在使用Flask框架搭建舆情监控可视化系统时,我们需要安装Flask和pymongo(用于连接MongoDB数据库)库,并使用以下代码创建Flask应用程序:

```python
import json
from flask import Flask, render_template
from pymongo import MongoClient

app = Flask(__name__)

@app.route('/')
def index():
    client = MongoClient('localhost', 27017)
    db = client['university']
    collection = db['ARWU']
    data_list = []
    for data in collection.find():
        del data['_id']
        data_list.append(data)
    return render_template('index.html', data_list=json.dumps(data_list, ensure_ascii=False))

if __name__ == '__main__':
    app.run()
```

其中,localhost代表MongoDB数据库所在的主机名,27017代表MongoDB数据库的端口号。

此外,我们也可以使用request库获取前端传输来的数据,例如:

```python
from flask import request

@app.route('/api/search', methods=['GET'])
def search():
    keyword = request.args.get('keyword')
    client = MongoClient('localhost', 27017)
    db = client['university']
    collection = db['ARWU']
    data_list = []
    for data in collection.find({'name': {'$regex': keyword}}):
        del data['_id']
        data_list.append(data)
    return json.dumps(data_list, ensure_ascii=False)
```

在使用Flask框架时,我们需要创建一个templates文件夹,用于存放html文件,如下所示:

![templates](https://CS0waW1nLmNvbS9BdWxuZXdzL2RlZmF1bHRfc3RvcmUuanBn)

在templates文件夹中,我们需要创建一个index.html文件,用于显示数据。具体代码如下:

```html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>中国大学排名</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
    <style>
        /* 设置容器大小 */
        #main {
            height: 600px;
        }
    </style>
</head>
<body>
<!-- 设置一个容器用于展示数据 -->
<div id="main"></div>
<!-- 使用JavaScript渲染表格 -->
<script type="text/javascript">
    // 获取后端传输的数据
    var data = JSON.parse({{data_list}});
    // 初始化echarts图表
    var myChart = echarts.init(document.getElementById('main'));

// 配置图表参数
    var option = {
        tooltip: {},
        legend: {
            data: ['总分']
        },
        xAxis: {
            data: data.map(function (item) {
                return item.name;
            })
        },
        yAxis: {},
        series: [{
            name: '总分',
            type: 'bar',
            data: data.map(function (item) {
                return item.score;
            })
        }]
    };

// 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>
</body>
</html>

```

这里,我们使用了ECharts库(https://echarts.apache.org/)来实现数据可视化展示。

最后,在命令行中运行app.py文件,即可启动Flask应用程序。

五、使用MongoDB存储数据

在本例中,我们使用MongoDB作为数据存储方式。MongoDB是一种非关系型数据库,与关系型数据库相比,MongoDB更加灵活、扩展性更好、支持海量数据存储等特点。

在Python中,我们可以使用pymongo库来进行MongoDB的连接和操作。具体代码如下:

```python

from pymongo import MongoClient

client = MongoClient('localhost', 27017)
db = client['university']
collection = db['ARWU']

data = {'rank': '1', 'name': 'Harvard University', 'region': 'USA', 'score': '100'}
collection.insert_one(data)

result = collection.find({'region': 'USA'})
for data in result:
    print(data)

```

在上述代码中,我们首先连接MongoDB,并选择要操作的数据库和集合。然后,我们插入一条数据,并通过find方法查询指定条件的数据。

六、总结

本文介绍了如何使用Python爬取舆情数据,通过使用代理IP提高数据爬取效率。同时,我们还学习了如何使用Flask框架搭建舆情监控可视化系统,以及使用MongoDB存储数据。

这个舆情监控可视化系统还有许多需要完善和改进的地方,例如如何实时更新数据、如何提高数据可视化展示的交互性等等,希望读者能够在此基础上进行更进一步的探索和实践。

Python基于Flask的高校舆情分析,舆情监控可视化系统的更多相关文章

  1. Python基于Flask框架配置依赖包信息的项目迁移部署小技巧

    一般在本机上完成基于Flask框架的代码编写后,如果有接口或者数据操作方面需求需要把代码部署到指定服务器上. 一般情况下,使用Flask框架开发者大多数都是选择Python虚拟环境来运行项目,不同的虚 ...

  2. 基于web3D展示技术的煤矿巷道3D可视化系统

    地下开采离不开巷道工程.煤矿的生产.运输.排水.通风等各个环节都少不了巷道的支持.在煤矿智能化建设被提上日程的今天,巷道工程的智能化.可视化建设也成了行业趋势.尤其是复杂的井下作业环境,人员信息安全问 ...

  3. 搭建一个简单的基于web的网络流量监控可视化系统

    本文转载于我的个人博客,转载请标明出处. 初衷 在腾讯云的学生认证申请提交上去n天之后,终于得到了审批,所以迫不及待的想玩玩腾讯云,作为一个搞网络的,自然有一些关于网络应用的小玩意,所以把以前部署过的 ...

  4. 基于 HTML5 WebGL + WebVR 的 3D 虚实现实可视化系统

    前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...

  5. 基于flask框架的高校舆情分析系统

    系统分析: 高校舆情分析拟实现如下功能,采集微博.贴吧.学校官网的舆情信息,对这些舆情进行数据分析.情感分析,提取关键词,生成词云分析,情感分析图,实时监测舆情动态. 系统设计: 前端:采用layui ...

  6. 基于flask的可视化动漫分析网站【python入门必学】

    课程设计项目名称:基于flask的可视化动漫分析网站,如果你在学习Python的过程中,往往因为没有好的教程或者没人指导从而导致自己容易放弃,为此我建了个Python交流.裙 :一久武其而而流一思(数 ...

  7. 【爬虫+数据清洗+可视化分析】舆情分析哔哩哔哩"狂飙"的评论

    目录 一.背景介绍 二.爬虫代码 2.1 展示爬取结果 2.2 爬虫代码讲解 三.可视化代码 3.1 读取数据 3.2 数据清洗 3.3 可视化 3.3.1 IP属地分析-柱形图 3.3.2 评论时间 ...

  8. Python flask 基于 Flask 提供 RESTful Web 服务

    转载自 http://python.jobbole.com/87118/ 什么是 REST REST 全称是 Representational State Transfer,翻译成中文是『表现层状态转 ...

  9. 基于Python的Flask的开发实战(第二节程序的基本结构)

    1.初始化 所有的flask程序都必须创建一个程序实例 web服务器使用wsgi接口协议,把接收客户端的请求都转发给这个程序实例来进行处理.这个程序实例就是flask对象 from flask imp ...

  10. [转]python实现RESTful服务(基于flask)

    python实现RESTful服务(基于flask) 原文: https://www.jianshu.com/p/6ac1cab17929  前言 上一篇文章讲到如何用java实现RESTful服务, ...

随机推荐

  1. HTTP请求的几种方式

    1.HTTP请求简介[1] HTTP(Hypertest Transfer Protocol)是用于传输像HTML这样的超文本文件的应用层协议.它被设计用于WEB浏览器端和WEB服务端的交互,但也有其 ...

  2. MySQL-class

    1.数据库和SQL概念 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它的产生距今已有六十多年.随着信息技术和市场的发展,数据库变的无处不在:它在电子商务.银行系统等众多领域都 ...

  3. 7. 特殊SQL的执行

    1. 模糊查询 ‍ 演示代码: /** * 测试模糊查询 * @param mohu * @return */ List<User> testMohu(@Param("mohu& ...

  4. spring-boot-maven-plugin插件详解

    一. 为什么Spring Boot项目自带这个插件 当我们在SpringBoot官方下载一个脚手架时,会发现pom.xml会自带spring-boot-maven-plugin插件 <?xml ...

  5. [python] 基于matplotlib-scalebar库绘制比例尺

    matplotlib-scalebar是一个Python库,用于在matplotlib图形中添加比例尺.它允许用户指定比例尺的大小.位置.字体和颜色,以及比例尺的单位.该库支持不同的比例尺单位,例如米 ...

  6. docker 安装redis 6.0.8哨兵集群(一主两从三哨兵)

    准备三台主机并且安装了docker 192.168.31.132 192.168.31.134 192.168.31.144 linux 版redis6.0.8 下载 下载地址:https://dow ...

  7. Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics

    在Delta Lake官网上提到的一篇新一代湖仓架构的论文. 这篇论文由Databricks团队2021年发表于CIDR会议. 这个会议是对sigmod和vldb会议的补充. 可以看到这篇论文和前一篇 ...

  8. elasticSearch初步学习反思

    转自自己的qq空间 2022年11月29日 每次找到新技术就会发癫 把业务整理完了 看着elasticSearch开始发癫 TM的把所有的一切都塞给它 反正全标记索引要啥拿啥 狠狠地获取就完了 思来想 ...

  9. docker部署zabbix 6.0高可用集群实验

    0 实验环境 虚拟机,postgresql本地部署,zabbix server及nginx容器部署 1 postgresql 参看前作 <postgresql + timescaledb离线安装 ...

  10. C++与Java共同点

    前言 首先我们来了解一下C++语言,大多人都C++语言是C语言基础上的改编,所以它拥有一个和C语言一样的类似结构,但是它与Java又有不可分割的关系 接下来我们来看几道题: 例如:常数O运行次数与N大 ...