python舆情系统开发_什么是舆情

python舆情系统开发_什么是舆情下面的这篇文章将手把手教大家搭建一个简单的股票舆情分析系统,其中将先通过金融界网站爬取指定股票在一段时间的新闻,然后通过百度情感分析接口,用于评估指定股票的正面和反面新闻的占比,以此确定该股票是处于利好还是利空的状态。1、环境准备本地环境:Python3.7IDE:Pycharm库版本:re2.2.1lxml4.6.3requests2.24.0aip4.15.5matplotlib3.2.1然后,导入需要用到的所有库:importrequest

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

下面的这篇文章将手把手教大家搭建一个简单的股票舆情分析系统,其中将先通过金融界网站爬取指定股票在一段时间的新闻,然后通过百度情感分析接口,用于评估指定股票的正面和反面新闻的占比,以此确定该股票是处于利好还是利空的状态。

1、环境准备

本地环境:

Python 3.7
IDE:Pycharm

库版本:

re 2.2.1
lxml 4.6.3
requests 2.24.0
aip 4.15.5
matplotlib 3.2.1

然后,导入需要用到的所有库:

import requests
import matplotlib.pyplot as plt
import pandas as pd
from lxml import etree
from aip import AipNlp

2、代码实现

1、获取新闻数据

首先,我们需要通过金融界(http://stock.jrj.com.cn/share)的网站爬取股票的新闻信息。获取指定股票的新闻资讯的接口形式是:

http://stock.jrj.com.cn/share,股票代码,ggxw.shtml
如:http://stock.jrj.com.cn/share,600381,ggxw.shtml

如600381股票的新闻资讯如下图所示:

python舆情系统开发_什么是舆情

需要注意的是,当获取后面几页的新闻时,其接口需要加一个后缀,形式如下: 

http://stock.jrj.com.cn/share,600381,ggxw_page.shtml
如获取第二页,http://stock.jrj.com.cn/share,600381,ggxw_2.shtml

首先,我们定义一个函数,传入一个股票代码的列表,表示用于下载到本地的股票新闻的代码。然后将每个股票的代码拼接到api中,然后调用parse_pages()函数用于爬取该api下网页中的数据。

# 下载指定的股票的新闻数据
def download_news(codes):
    for code in codes:
        print(code)
        url = "http://stock.jrj.com.cn/share," + str(code) + ",ggxw.shtml"
        parse_pages(url, code)

接下来,我们实现上面的parse_pages()函数。其中需要先获取每一页新闻数据的总的页数,然后针对每一页拼接对应的api接口,最后再对每一页的新闻数据进行下载。


# 解析每个页面的数据
def parse_pages(url, code):
    max_page = get_max_page(url)
    for i in range(1, max_page + 1):
        if i != 1:
            url = "http://stock.jrj.com.cn/share," + str(code) + ",ggxw_" + str(i) + ".shtml"
        download_page(url, code)

获取最大页数的函数如下,其中用到了lxml下的etree模块来解析html代码,然后通过正则表达式获取最大页数。

# 获取url下的最大page数
def get_max_page(url):
    page_data = requests.get(url).content.decode("gbk")
    data_tree = etree.HTML(page_data)
    if page_data.find("page_newslib"):
        max_page = data_tree.xpath("//*[@class=\"page_newslib\"]//a[last()-1]/text()")
        return int(max_page[0])
    else:
        return 1

接下来实现download_page()函数,它的作用通过正则表达式匹配页面中的新闻标题,并将获取的标题数据保存到本地文件中。


# 解析指定页面的数据并保存至本地
def download_page(url, code):
    try:
        page_data = requests.get(url).content.decode("gbk")
        data_tree = etree.HTML(page_data)
        titles = data_tree.xpath("//*[@class = \"newlist\"]//li/span/a/text()")
        for title in titles:
            title = title + "\r\n"
            with open(str(code) + ".txt", "a") as file:
                file.write(title)
                file.flush()
        return
    except:
        print("服务器超时")

接下来,通过调用上面的download_news()函数,并传入需要爬取新闻的股票代码列表,就可以将新闻数据爬取到本地了。

codes = [600381, 600284, 600570, 600519, 600258, 601179]
download_news(codes)

得到的新闻数据形式如下图所示:

python舆情系统开发_什么是舆情

 

2、新闻情绪分析以及统计

在获取了股票的新闻数据之后,我们接下来需要对每支股票的所有新闻进行情感分析了。其中用到了百度人工智能接口aip下的aipNLP用于对所有新闻数据进行自然语言处理,并进行情感分析。需要注意的是,在通过百度人工智能接口进行情感分析之前需要先注册并获取APP_ID、API_KEY以及SECRET_KEY。获取的方式如下:

首先,登录并注册百度人工智能平台(https://ai.baidu.com/):

python舆情系统开发_什么是舆情 然后,在自己的控制台中找到自然语言处理,并创建应用,如下图所示:

python舆情系统开发_什么是舆情创建完成之后就可以得到自己的APP_ID、API_KEY以及SECRET_KEY,如下图所示:

python舆情系统开发_什么是舆情

接下来通过一个函数来实现对指定的股票进行情感分析并保存到本地: 

 

# 对指定的股票进行情感分析并保存到本地
def analyze_stocks(codes):
    df = pd.DataFrame()
    for code in codes:
        print(code)
        stock_dict = analyze(code)
        df = df.append(stock_dict, ignore_index=True)
    df.to_csv('./stocks.csv')

 其中的analyze()函数实现如下,其中需要将前面申请的APP_ID、API_KEY以及SECRET_KEY进行定义。之后读取包含每个股票的所有新闻的文件,其中每一行表示一个新闻标题。然后通过aipNLP对每个标题进行情感分析,进而基于得到的分析结果来统计积极新闻和消极新闻的个数,最后将针对每支股票的分析结果返回:

# 对指定股票的所有新闻数据进行情感分析并进行统计
def analyze(code):
    APP_ID = 'your app id'
    API_KEY = 'your api key'
    SECRET_KEY = 'your secret key'
    positive_nums = 0
    nagative_nums = 0
    count = 0
    aipNlp = AipNlp(APP_ID, API_KEY, SECRET_KEY)
    lines = open(str(code) + '.txt').readlines()
    for line in lines:
        if not line.isspace():
            line = line.strip()
            try:
                result = aipNlp.sentimentClassify(line)
                positive_prob = result['items'][0]['positive_prob']
                nagative_prob = result['items'][0]['negative_prob']
                count += 1
                if positive_prob >= nagative_prob:
                    positive_nums += 1
                else:
                    nagative_nums += 1
            except:
                pass
    avg_positive = positive_nums / count
    avg_nagative = nagative_nums / count
    print('股票代码:',code, '消极比例:', avg_nagative, '积极比例:',avg_positive)
    return {'股票代码':code, '消极比例':avg_nagative, '积极比例':avg_positive}

调用下面的代码进行分析,并生成统计结果:

codes = [600381, 600284, 600570, 600519, 600258, 601179]
analyze_stocks(codes)

3、数据可视化

最后我们将得到的结果进行可视化,可以直观地看到每支股票的消极新闻和积极新闻所占的比例。

def show():
    matplotlib.rcParams['font.sans-serif'] = ['SimHei']
    matplotlib.rcParams['axes.unicode_minus'] = False
    df = pd.read_csv('./stocks.csv', index_col='股票代码', usecols=['股票代码', '消极比例','积极比例'])
    df.plot(kind='barh', figsize=(10, 8))
    plt.show()

效果图如下所示:

python舆情系统开发_什么是舆情

 

3、总结

在这篇文章中,我们介绍了如何基于python搭建一个简单的股票舆情分析系统,其中将先通过金融界网站爬取指定股票在一段时间的新闻,然后通过百度情感分析接口对新闻进行情感分析,最后统计股票的正面和反面新闻的占比,以此确定该股票是处于利好还是利空的状态。基于此系统,大家可以进行进一步的进行扩展以应用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191331.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JDK8新特性_JDK8面试题

    JDK8新特性_JDK8面试题JDK8新特性lambda表达式要求:接口必须是函数式接口,一个接口如果只有一个抽象方法,那他就是函数式接口,我们可以在一个接口上使用_Functionallnterface_注解package com.atguigu.java;import java.util.Comparator;public class LambaTest { public static void main(String[] args) { Runnable r1 = new Runnable()

    2022年8月8日
    9
  • 详解EditText输入监听TextWatcher「建议收藏」

    日常开发中,我们可能会遇到需要监听EditText输入,比如判断输入是否为电话号码,获取输入的数据长度来限定字数等。这就需要监听EditText的输入状态。EditText使用TextWatcher实现类似按钮监听事件:使用方法效果图:MainActivity.javapublicclassMainActivityextendsAppCompatActivity{priv

    2022年4月16日
    38
  • linux中ll命令用法_linux命令ll与ls的区别

    linux中ll命令用法_linux命令ll与ls的区别ll并不是linux下一个基本的命令,它实际上是ls-l的一个别名。一些Linux系统默认不支持命令ll,必须用ls-l,这样使用起来不是很方便。如果要使用此命令,可以作如下修改:打开~/.bashrc增加aliasll=‘ls-l’aliasll=’ls-l’(关闭原来的终端才能使命令生效)这样个人用户可以使用ll命令,当切换成超级用户后,使用ll命令时提示找不到命令,那是因为你只是修改了个人用户的配置,所以,切换成root后做相同的操作即可解决问题。启示:我们可以通

    2022年9月15日
    5
  • 常量字符串过长的解决办法_未受控的格式化字符串

    常量字符串过长的解决办法_未受控的格式化字符串如果使用String str = “这是一个很长很长很长 你需要的字符串。”; 出现异常不能正常编译运行时,可以使用下方:StringBuilder sb = new StringBuilder();sb.append(“这是一个很长很长”);sb.append(“很长 你需要的字符串”);字符串太长或字符串其他情况下可使用 : StringBuilder sb = new StringBuilder()…

    2022年8月19日
    37
  • 关系数据库设计理论中,起核心作用的是_关系数据库设计理论主要包括

    关系数据库设计理论中,起核心作用的是_关系数据库设计理论主要包括关系数据库设计理论设计一个好的关系数据库系统,关键是要设计一个好的数据库模式(数据库逻辑设计问题)数据库逻辑设计主要解决的问题关系数据库应该组织成几个关系模式关系模式中包括哪些属性“不好”的数据库设计举例:为学校设计一个关系数据库关系模式:UN(Sno,Cno,G,Sdept,MN)Sno:描述学生Sdept:描述系名MN:描述系…

    2022年10月16日
    2
  • 《斯坦福算法博弈论二十讲》学习笔记(持续更新)

    《斯坦福算法博弈论二十讲》学习笔记(持续更新)《斯坦福算法博弈论二十讲》学习笔记(持续更新)第一章简介和实例第二章机制设计基础第三章迈尔森引理第四章算法机制设计第一章简介和实例羽毛球比赛中的规则漏洞12年伦敦奥运会的羽毛球赛事中发生了一件钻规则漏洞的“丑闻”。赛制规则如下:共分为两个小组,每个小组四只队伍,小组赛阶段各个小组的前两名晋级,A组第1名对阵B组第2名,A组第2名对阵B组第1名,之后进行两两淘汰赛。TZ是本届赛事公认的强队,已经提前小组赛出线。WY与JK进行一场小组赛,二者之间的胜者将会对阵TZ,因此两只队伍都不想赢,都在

    2022年10月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号