首页 > 编程语言 >Python基于Flask的高校舆情分析,舆情监控可视化系统

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

时间:2023-09-13 14:32:35浏览次数:46  
标签:数据 Python IP 爬取 Flask 舆情 使用 data

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

本文介绍如何基于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库。

import requests
from bs4 import BeautifulSoup

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

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库发送请求,获取网页内容,并解析所需的数据。

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进行数据爬取:

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应用程序:

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库获取前端传输来的数据,例如:

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文件夹中,我们需要创建一个index.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的连接和操作。具体代码如下:

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,IP,爬取,Flask,舆情,使用,data
From: https://blog.51cto.com/u_16022798/7455118

相关文章

  • 使用python-dotenv进行高效的环境管理
    1python-dotenv项目简介项目地址:https://github.com/theskumar/python-dotenv功能描述:从.env文件读取键值对,并将它们添加到环境变量中。核心理念:在项目中,可以将所有使用的环境变量写入.env文件,然后以键值对的方式读取作为环境变量。2用法2.1.env文件内容示例#这......
  • Windows使用任务计划程序创建定时运行Python脚本
    最近有需求需要每天定时运行python程序,了解了一些方法。目前觉得Windows系统最简单的方法就是设置任务计划程序定时运行。在Windows中,任务计划程序(TaskScheduler)是一个持久的服务,通常不会因为计算机的关机或重启而停止。一旦你成功创建并配置了定时任务,它将按照你设置的触发条......
  • pycharm设置新建Python文件的模板
    首先找到Pycharm设置默认文件的位置,File-Setting-Editor-FileandCodeTemplates->PythonScript最后附上相应的编写内容大家按需选择:#coding:utf-8——>这里是设置的编码格式,根据自己的实际情况可以修改#当前的项目名:${PROJECT_NAME}#当前编辑文件名:${NAME}#当前......
  • Python中常用注释快捷键有哪些?
    所谓注释是在代码中用来进行解释、说明或者提醒的内容。它是程序中的非执行语句,主要用来增强代码的可读性和维护性。那么Python中常用注释快捷键有哪些?下面是常用的Python注释快捷键介绍。单行注释:在Python中,使用#符号来添加单行注释。可以使用快捷键Ctrl+/来快速添加或取......
  • Python实现最大似然估计
    数据部分这个部分,我们使用的是csv数据。下面介绍数据处理的方法。数据读取在Python中,我们可以使用内置的csv模块来读取csv文件。以下是一个简单的例子,演示如何将csv文件读取为多维列表:importcsv#创建一个空列表来存储数据data=[]#使用with语句打开csv文件,这样可以确......
  • day0-Python之路-编码之始-致那些年,我们依然没搞明白的编码
    本节内容编码回顾编码转换Python的bytes类型 编码回顾在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有一天它会猝不及防坑你一把。不过感觉这哥们的答案并没把编码问题写明白,所以只好......
  • 《Python编程从入门到实践》--- 学习过程笔记(4)列表操作
    一、遍历列表squares=('a','b','c','d')foriinlist(squares):print(i)二、python根据缩进来判断代码与前一个代码行的关系。(要注意缩进问题)for循环中,其下的所有缩进语句都属于for循环。三、数字列表创建及操作(1)range()函数。range(a,b)只打印a到b前一......
  • Centos7升级python3.9
    Centos7升级python3.91.系统升级yumupdate-yyum-ygroupinstall"Developmenttools"yuminstallopenssl-develbzip2-develexpat-develgdbm-develreadline-develsqlite-develpsmisclibffi-devel2.下载python3.9源码包wgethttps://www.python.org/ftp/py......
  • Python文件操作
    Python文件操作文件的编码计算机只能识别:0和1,我们需要使用编码技术(密码本)将内容翻译成0和1存入。计算机中有许多可用编码:UTF-8、GBK、Big5等,不同的编码,将内容翻译的二进制也是不相同的。编码:编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。编码有许多中,我们......
  • Python - unix timestamp 时间戳转换错误
    用python的时间转换函数,结果报错。想着这么基础的怎么会报错呢。fromdatetimeimportdatetime#timestampisnumberofsecondssince1970-01-01timestamp=1545730073#convertthetimestamptoadatetimeobjectinthelocaltimezonedt_object=datetime.from......