• Python基于Flask的高校舆情分析,舆情监控可视化系统


    目录

    一、前言

    二、使用Python爬取舆情数据

    1.安装requests库

    2.分析数据

    3.爬取数据

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

    1.获取代理IP

    2.使用代理IP

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

    五、使用MongoDB存储数据

    六、总结


    一、前言


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

    本文介绍如何基于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请求,发送请求、接收响应。使用以下命令进行安装:

    !pip install requests
    2.分析数据

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

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

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

    3.爬取数据

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

    1. import requests
    2. from bs4 import BeautifulSoup

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

    1. headers = {
    2.     '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'}
    3. params = {
    4.     'from': 'hao360',
    5.     'ie': 'utf-8',
    6.     'query': 'python'}

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

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

    1. url = 'http://www.zuihaodaxue.com/ARWU2020.html'
    2. response = requests.get(url, headers=headers)
    3. response.encoding = response.apparent_encoding
    4. soup = BeautifulSoup(response.text, 'html.parser')
    5. all_university = soup.findAll('tr', {'class': 'bgfd'})
    6. for university in all_university:
    7.     rank = university.find('td', {'align': 'center'}).getText()
    8.     name = university.find('a').getText()
    9.     region = university.find('div', {'style': 'padding-left:10px;'}).getText().strip()
    10.     score = university.findAll('td', {'align': 'center'})[-1].getText()
    11.     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地址和端口号,将它们加入到请求头中,即可使用代理IP进行数据爬取。

    2.使用代理IP

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

    1. import requests
    2. url = 'http://www.zuihaodaxue.com/ARWU2020.html'
    3. proxies = {'http': 'http://111.177.190.36:9999', 'https': 'https://111.177.190.36:9999'}
    4. 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'}
    5. response = requests.get(url, headers=headers, proxies=proxies)
    6. print(response.text)

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

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

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

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

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

    1. import json
    2. from flask import Flask, render_template
    3. from pymongo import MongoClient
    4. app = Flask(__name__)
    5. @app.route('/')
    6. def index():
    7.     client = MongoClient('localhost', 27017)
    8.     db = client['university']
    9.     collection = db['ARWU']
    10.     data_list = []
    11.     for data in collection.find():
    12.         del data['_id']
    13.         data_list.append(data)
    14.     return render_template('index.html', data_list=json.dumps(data_list, ensure_ascii=False))
    15. if __name__ == '__main__':
    16.     app.run()

    其中,localhost代表MongoDB数据库所在的主机名,27017代表MongoDB数据库的端口号。此外,我们也可以使用request库获取前端传输来的数据,例如:

    1. from flask import request
    2. @app.route('/api/search', methods=['GET'])
    3. def search():
    4.     keyword = request.args.get('keyword')
    5.     client = MongoClient('localhost', 27017)
    6.     db = client['university']
    7.     collection = db['ARWU']
    8.     data_list = []
    9.     for data in collection.find({'name': {'$regex': keyword}}):
    10.         del data['_id']
    11.         data_list.append(data)
    12.     return json.dumps(data_list, ensure_ascii=False)

    在使用Flask框架时,我们需要创建一个templates文件夹,用于存放html文件,如下所示:![templates](https://CS0waW1nLmNvbS9BdWxuZXdzL2RlZmF1bHRfc3RvcmUuanBn)

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

    1. html>
    2. <html>
    3. <head>
    4.     <meta charset="UTF-8">
    5.     <title>中国大学排名title>
    6.     <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js">script>
    7.     <style>
    8.         /* 设置容器大小 */
    9.         #main {
    10.             height: 600px;
    11.         }
    12.     style>
    13. head>
    14. <body>
    15. <div id="main">div>
    16. <script type="text/javascript">
    17.     // 获取后端传输的数据
    18.     var data = JSON.parse({{data_list}});
    19.     // 初始化echarts图表
    20.     var myChart = echarts.init(document.getElementById('main'));
    21.     // 配置图表参数
    22.     var option = {
    23.         tooltip: {},
    24.         legend: {
    25.             data: ['总分']
    26.         },
    27.         xAxis: {
    28.             data: data.map(function (item) {
    29.                 return item.name;
    30.             })
    31.         },
    32.         yAxis: {},
    33.         series: [{
    34.             name: '总分',
    35.             type: 'bar',
    36.             data: data.map(function (item) {
    37.                 return item.score;
    38.             })
    39.         }]
    40.     };
    41.     // 使用刚指定的配置项和数据显示图表。
    42.     myChart.setOption(option);
    43. script>
    44. body>
    45. html>

    这里,我们使用了ECharts库(https://echarts.apache.org/)来实现数据可视化展示。最后,在命令行中运行app.py文件,即可启动Flask应用程序。

    五、使用MongoDB存储数据

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

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

    1. from pymongo import MongoClient
    2. client = MongoClient('localhost', 27017)
    3. db = client['university']
    4. collection = db['ARWU']
    5. data = {'rank': '1', 'name': 'Harvard University', 'region': 'USA', 'score': '100'}
    6. collection.insert_one(data)
    7. result = collection.find({'region': 'USA'})
    8. for data in result:
    9.     print(data)

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

    六、总结

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

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

     

  • 相关阅读:
    [Kotlin Tutorials 21] 协程的取消
    【Linux】Qt Remote之Remote开发环境搭建填坑小记
    企业实战之 docker 的部署
    【无标题】
    生成树协议 STP(spanning-tree protocol)
    到底什么是上采样、下采样
    远程拷贝Windows上的文件到Linux指定的文件夹
    MySQL锁问题
    AWS SAP-C02考试题库
    数据结构与算法:树
  • 原文地址:https://blog.csdn.net/wq10_12/article/details/132851558