微信号:python6359

介绍:每天推送python语言的相关信息

教你用Python爬虫股票评论,简单分析股民用户情绪

2017-12-13 23:39 技术小能手

背景



        股民是网络用户的一大群体,他们的网络情绪在一定程度上反映了该股票的情况,也反映了股市市场的波动情况。作为一只时间充裕的研究僧,我课余时间准备写个小代码get一下股民的评论数据,分析用户情绪的走势。代码还会修改,因为结果不准确,哈哈!

数据来源

背景

        本次项目不用于商用,数据来源于东方财富网,由于物理条件,我只获取了一只股票的部分评论,没有爬取官方的帖子,都是获取的散户的评论。


数据获取


        Python是个好工具,这次我使用了selenium和PhantomJS组合进行爬取网页数据,当然还是要分析网页的dom结构拿到自己需要的数据。


爬虫部分

存储部分:

这部分其实可以用数据库来做,但是由于只是试水,就简单用json文件来存部分数据:

测试用的local服务器:

这里只是为了要用浏览器浏览数据图,由于需要读取数据,js没有权限操作本地的文件,只能利用一个简单的服务器来弄了: 

NLP部分:snowNLP这个包还是用来评价买卖东西的评论比较准确

不是专门研究自然语言的,直接使用他人的算法库。这个snowNLP可以建立一个训练,有空自己来弄一个关于股票评论的。

主调度

前端数据展示

使用百度的echarts。用户的情绪是使用当天所有评论的情绪值的加权平均,加权系数与用户的股龄正相关。

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="UTF-8">  
<title>分析图表</title>  
<style>  
body{texr-align:center;}  
#mainContainer{width:100%;}  
#fileContainer{width:100%; text-align:center;}  
#picContainer{width: 800px;height:600px;margin:0 auto;}  
</style>  
</head>  
<body>  
<div id = 'mainContainer'>  
<div id = 'fileContainer'>这里是文件夹列表</div>  
<div id = 'picContainer'></div>  
</div>  
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>   
<script src = "./echarts.js"></script>  
<script>  
main();  
function main(){  
    var stocknum = 600000;  
    getDate(stocknum);  
}  
function getDate(stocknum){  
    var src = "./data/"+stocknum+".json";  
    $.getJSON(src, function (res){  
        var date = [];  
        for(var key in res){  
            key = key.replace('-','/').replace('-','/');  
            date.push(key);  
        }  
        date.sort();  
        data = [];  
        for (var i = 0; i < date.length; i++) {  
            dat = date[i].replace('/','-').replace('/','-');  
            data.push(res[dat]['content']/res[dat]['num']);  
        }  
        drawPic(date,data);  
    })  
}  
function drawPic(date, data){  
    //initialize and setting options  
    var myChart = echarts.init(document.getElementById('picContainer'));  
    option = {  
        tooltip: {  
            trigger: 'axis',  
            position: function (pt) {  
                return [pt[0], '10%'];  
            }  
        },  
        title: {  
            left: 'center',  
            text: '股票情绪走向图',  
        },  
        toolbox: {  
            feature: {  
                dataZoom: {  
                    yAxisIndex: 'none'  
                },  
                restore: {},  
                saveAsImage: {}  
            }  
        },  
        xAxis: {  
            type: 'category',  
            boundaryGap: false,  
            data: date  
        },  
        yAxis: {  
            type: 'value',  
            boundaryGap: [0, '100%']  
        },  
        dataZoom: [{  
            type: 'inside',  
            start: 0,  
            end: 10  
        }, {  
            start: 0,  
            end: 10,  
            handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',  
            handleSize: '80%',  
            handleStyle: {  
                color: '#fff',  
                shadowBlur: 3,  
                shadowColor: 'rgba(0, 0, 0, 0.6)',  
                shadowOffsetX: 2,  
                shadowOffsetY: 2  
            }  
        }],  
        series: [  
            {  
                name:'stocknum',  
                type:'line',  
                smooth:true,  
                symbol: 'none',  
                sampling: 'average',  
                itemStyle: {  
                    normal: {  
                        color: 'rgb(255, 70, 131)'  
                    }  
                },  
                areaStyle: {  
                    normal: {  
                        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{  
                            offset: 0,  
                            color: 'rgb(255, 158, 68)'  
                        }, {  
                            offset: 1,  
                            color: 'rgb(255, 70, 131)'  
                        }])  
                    }  
                },  
                data: data  
            }  
        ]  
    };  
    //draw pic  
    myChart.setOption(option);    
}  
</script>  
</body>  
</html>  


图1:我分析用户情绪画出的时间推进图,理论上小于0.5表消极情绪,大于0.5表示积极情绪。

图2:实际股价的走势。

作者:技术小能手

源自:https://yq.aliyun.com/articles/281148

声明:文章著作权归作者所有,如有侵权,请联系小编删除

 
python 更多文章 Python爬取图片,一言不合就要开车! Python奇技淫巧你知道多少? Python学习资料! Python编程语言入门经典案例 scrapy+selenium爬取UC头条网站
猜您喜欢 DCOS任务调度模块Marathon健康检测机制浅析(上) 每日安全动态推送(10-10) (续) 为什么用Yarn来做Docker容器调度引擎 QQ音乐与网易云音乐达成版权战略合作(内附五大解析) 互联网上装逼,你必须学会的十个词汇