温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者: 梁海(河北大学)
邮箱: lianyhai@163.com
目录
自 2006 年上线以来,「东方财富股吧」以其独创的交互模式,成为深受广大中小投资者喜爱的投资交流社区之一。也因此,其股吧评论可以有效代表资本市场上中小投资者情绪。
本文将主要介绍如何爬取「东方财富股吧」评论,并计算评论情绪倾向。
本文使用了 Python 的 request
库作为主要爬取工具,并且该库具有简单易用等特点,能够满足一般的数据爬取需求。
进一步,本文使用了 xpath
来获取特定标签所储存的信息。XPath
,全称 XML Path Language,即 XML 路径语言。XPath
最初设计是用来搜寻 XML 文档的,但是也同样适用于 HTML 文档的搜索。XPath 的选择功能十分强大,不但提供了非常简洁明了的路径选择表达式,而且还提供了超过 100 个内建函数用于字符串、数值、时间的匹配,以及节点、序列的处理等。甚至,我们可以认为几乎所有定位的节点都可以用 XPath
来选择。
本文爬取的股吧为上证指数,作为国民关注度最高的指数,该股吧也是众多的股吧中活跃度最高的。因此用上证指数股吧,作为爬取对象。
在本文中,我们将仅以「上证指数」的股吧评论为例进行演示。
import requests ##获取网页
from lxml import etree ##解析文档
import pandas as pd ##保存文件
网址:http://guba.eastmoney.com/list,zssh000001,f.html
第一页如图所示:
第二页如图所示:
可以发现,两页网址区别在于 f_ 后面的数字不同,因此可以通过设置数字爬取不同页面内容。
通过 requests
库,我们可以获取网页源代码。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'} #构造头文件,模拟浏览器。
for page in range(1,max_page+1):
#获取网页源代码
print('crawling the page is {}'.format(page))
url= f'http://guba.eastmoney.com/list,zssh000001,f_{page}.html'
response = requests.get(url, headers=headers)
然后,通过 xpath
解析网页源代码,我们就可以获取需要信息。
在谷歌浏览器内按 F12 进入开发者模型,审查我们所需要的元素,如下图:
可以看出,所有的标题和时间都保存在属性为 articleh normal_post
的 div
标签下,因此我们可以构造如下代码进行爬取。当然,以上过程也可以借助 XPath Helper
工具大大简化,
title = root.xpath("//div[contains(@class,'articleh normal_post')]//span[@class='l3 a3']//a//text()")
time = root.xpath("//div[contains(@class,'articleh normal_post')]//span[@class='l5 a5']//text()")
完整代码如下:
max_page = 20 #最大爬取页面
all_title = [] #爬取的标题存储列表
all_time = [] #爬取的发表时间储存列表
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'} #构造头文件,模拟浏览器。
for page in range(1,max_page+1):
#获取网页源代码
print('crawling the page is {}'.format(page))
url= f'http://guba.eastmoney.com/list,zssh000001,f_{page}.html'
response = requests.get(url, headers=headers)
#解析网页源代码
root = etree.HTML(response.text)
title = root.xpath("//div[contains(@class,'articleh normal_post')]//span[@class='l3 a3']//a//text()")
time = root.xpath("//div[contains(@class,'articleh normal_post')]//span[@class='l5 a5']//text()")
all_title += title #保存到总数组上
all_time += time
data_raw = pd.DataFrame()
data_raw['title'] = all_title
data_raw['time'] = all_time
data_raw.to_excel('.//data_raw.xlsx', index=False)
输出结果如下:
如何获取自己的 User-Agent?
进入开发者模型,点击 Network,如下图:
然后,点击任意一个 Name 列的标题,就可以看到 User-Agent,如下图:
User-Agent 会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。
不久之前,百度正式发布情感预训练模型 SKEP (Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis)。通过利用情感知识增强预训练模型,SKEP 在 14 项中英情感分析典型任务上全面超越 SOTA。
具体实现原理,详见「SKEP: Sentiment Knowledge Enhanced Pre-training for Sentiment Analysis」。
#!pip install paddlehub
import paddlehub as hub
data_raw = pd.read_excel(".\\data_raw.xlsx")
data_raw['time'] = pd.to_datetime('2020 '+data_raw['time'])
##这里使用了百度开源的成熟NLP模型来预测情感倾向
senta = hub.Module(name="senta_bilstm")
texts = data_raw['title'].tolist()
input_data = {'text':texts}
res = senta.sentiment_classify(data=input_data)
data_raw['pos_p'] = [x['positive_probs'] for x in res]
##重采样至五分钟
data_raw.index = data_raw['time']
data = data_raw.resample('15min').mean().reset_index()
部分股本评论的情感评分如下:
可以看出,上述情感评分具有一定借鉴意义。
AkShare
是基于 Python 的财经数据接口库,可以实现对股票、期货、期权、基金、外汇、债券、指数、数字货币等金融产品的基本面数据、历史行情数据、以及衍生数据的快速采集和清洗。接下来,我们将使用 AKShare
库获取上证指数分时数据,具体代码如下:
#pip instasll akshare --usre
import akshare as ak
sz_index = ak.stock_zh_a_minute(symbol='sh000001', period='15', adjust="qfq")
sz_index['day'] = pd.to_datetime(sz_index['day'])
sz_index['close'] = sz_index['close'].astype('float')
data = data.merge(sz_index,left_on='time',right_on='day',how='inner')
import matplotlib.pyplot as plt
matplotlib.use('Qt5Agg')
data.index = data['time']
data[['pos_p','close']].plot(secondary_y=['close'])
plt.show()
可以看出,情绪相对于上证指数存在一个滞后效应。在初始的大幅上涨中,情绪没有立刻上涨,而是在第二次小幅上涨后才出现大幅度的上升。
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD