股票价格会受到各种小道消息的干扰,而这种小道消息对量化来讲很难控制(除非时时刻刻对网络所有资源进行监控,而这不现实)。
散户通常是小道消息的追捧者,所以我的想法是设计一个针对散户的爬虫。
思路:东方财富股吧有一个问董秘栏目,是散户和上市公司沟通的平台。个股的小道消息散播后,经常会有散户到问董秘栏目对传闻进行求证。
经过比较,问董秘平台是对上证e互动和深证互动易的汇总,但问董秘有两个问题:一是更新不及时;二是只显示已回复的问题。待董秘回复完并更新到该平台,则事件(传闻)的影响可能已经释放。
所以最终选择从上证e互动(http://sns.sseinfo.com/);深圳互动易(http://irm.cninfo.com.cn/szse/index.html)读取原始提问。
程序分为两个部分:第一部分利用python抓取上交所和深交所评论;第二部分利用jieba包进行文本分析,筛选出热门股票的评论和高频词汇。
注意:本程序只筛选了热点股票的评论和高频词汇,并没有进行词性分析。每天大概筛选出10-20只股票及其热点评论,需要人工对评论所涉及的事件进行具体分析。
突发事件是低频事件。每天筛选出股票并对评论进行分析后,很有可能做无用功。但一旦重大传闻出现,该程序可能就起到及时提醒的作用。
第一部分:抓取
1.来源1:上证e互动平台
2.来源2: 深证互动易
3.其他说明:之抓取csi800。利用了本地数据库。复制代码时,需要修改股票池==》line29:读取800成分股
1 # -*- coding:utf-8 -*- 2 from selenium import webdriver 3 import time 4 from selenium.webdriver.common.keys import Keys 5 from bs4 import BeautifulSoup 6 import re 7 import datetime 8 import pandas as pd 9 import jieba.analyse 10 import MySQLdb as mdb 11 import requests 12 from bs4 import BeautifulSoup 13 import bs4 14 15 chrome_options = webdriver.chrome.options.Options(); 16 chrome_options.add_argument('--headless') 17 driver = webdriver.Chrome(chrome_options=chrome_options) 18 19 def main(): 20 #0.0 时间初始化 21 today = datetime.datetime.now().date(); 22 tradedays=get_tradecalendar(today); 23 if today not in tradedays: 24 lastday = tradedays[-1] 25 else: 26 lastday=tradedays[tradedays.index(today)-1] 27 28 ##1.0 读取800成分股 29 members_800=get_index800(today); 30 h=0; 31 print 'crawler start' 32 ##上证e互动 和 深交所互动易 33 Failed_reading=[];Data=pd.DataFrame([]);j=0 34 for i in members_800: 35 code=i[0:6]; exchange=i[7:]; 36 h=h+1;print h,code 37 if exchange=='SH': 38 try: 39 x=get_ask_from_SHExchange(code,lastday,today) 40 if len(x) == 0: 41 continue 42 else: 43 x['code'] = i; 44 Data = Data.append(x) 45 except : 46 Failed_reading.append(i) 47 48 elif exchange=="SZ": 49 x=get_ask_from_SZExchange(code,lastday,today); 50 if len(x)==0: 51 continue 52 else: 53 x['code']=i; 54 Data = Data.append(x) 55 else: 56 continue; 57 Data.index=range(len(Data.index)) 58 Data.to_csv('comments_'+today.strftime("%Y%m%d")+'.xls',index=False,encoding='utf-8_sig') 59 print 'failed reading:', Failed_reading 60 61 def main1(): 62 today = datetime.datetime.now().date(); 63 tradedays = get_tradecalendar(today); 64 if today not in tradedays: 65 today=tradedays[-1]; 66 lastday = tradedays[tradedays.index(today) - 1] 67 print get_ask_from_SHExchange('600000',lastday,today) 68 69 ###读取上交所评论 70 def get_ask_from_SHExchange(code,yesterday,today): 71 # driver = webdriver.Chrome()