Python爬取东方财富股吧帖子信息并进行情感分析

您所在的位置:网站首页 股吧000545 Python爬取东方财富股吧帖子信息并进行情感分析

Python爬取东方财富股吧帖子信息并进行情感分析

2023-03-27 19:47| 来源: 网络整理| 查看: 265

股吧是东方财富网旗下股票主题社区,用户可进行实时行情评论和个股交流。本文将对股吧中的上证指数吧的帖子信息进行提取,并对帖子标题进行情感分析。

网址:

https://guba.eastmoney.com/list,zssh000001_1.html

image 目录

一、Python网络爬虫——爬取东方财富网帖子信息

1、观察网页

2、请求数据

3、解析数据

4、存储数据

二、Python情感分析——对爬取的帖子标题进行情感分析

1、snownlp库的简介

2、snownlp库的安装

3、snownlp库的使用

4、snownlp运用实例

一、Python网络爬虫——爬取东方财富网帖子信息(以1-10页为例) 1、观察网页 1.1 观察单页

(1)谷歌浏览器右键“检查”,点击“Network”,刷新页面。

(2)点击最上面的链接

(3)点击“Preview”或者“Response”,可以发现我们需要的数据在这里。说明这是一个静态网页。

image 1.2 观察翻页规律

本文的目标是爬取上证指数吧的帖子信息,上证指数的名称代码为zssh000001。

首页: https://guba.eastmoney.com/list,zssh000001_1.html 第二页: https://guba.eastmoney.com/list,zssh000001_2.html 第{i}页: https://guba.eastmoney.com/list,zssh000001_{i}.html

通过观察,可以看出股吧链接后缀主要由三部分组成:list、名称代码、页数。

因此,我们可以构建for循环,爬取多页的数据。

2、请求数据

查看Headers,发现为get请求,可通过requests库请求数据。

image

代码如下:

#导入相关库 import requests from bs4 import BeautifulSoup import pandas as pd #请求数据,定义函数 def getHTMLText(url): r=requests.get(url) r.encoding=r.apparent_encoding text=r.text return text 3、解析数据

我们需要获取的是”阅读数”、“评论数”、“标题”、“作者”、“最后更新”这五个信息,这五个信息分别位于行标签内,对应的属性分别是"l1 a1"、"l2 a2"、"l3 a3"、"l4 a4"、"l5 a5"。我们采用BeautifulSoup库解析数据并进行信息提取。

image

代码如下:

#解析单个网页,并提取数据字段 def getOnePageInfo(url): one_page_data=[] text=getHTMLText(url) soup=BeautifulSoup(text,'html.parser') post_list=soup.find_all('div',class_="articleh normal_post")#找到所有的帖子所在标签 for post in post_list: read_counts=post.find('span',class_='l1 a1').text #获取帖子阅读数 comment_counts=post.find('span',class_='l2 a2').text #获取帖子评论数 title=post.find('span',class_='l3 a3').text #获取帖子标题 author_id=post.find('span',class_='l4 a4').text #获取作者id time=post.find('span',class_='l5 a5').text #获取更新时间 data=[read_counts,comment_counts,title,author_id,time] one_page_data.append(data) return one_page_data 4、存储数据

我们可通过pandas的to_csv函数将数据写入到csv中。

代码如下:

#循环获取多页信息(以1-10页为例) all_data=[] for i in range(1,11): url=f'https://guba.eastmoney.com/list,zssh000001_{i}.html' one_page_data=getOnePageInfo(url) all_data.extend(one_page_data) #extend可以添加列表 #将数据存储至csv文件中 all_data=pd.DataFrame(all_data,columns=['阅读数','评论数','标题','作者','最后更新']) all_data.to_csv(r'D:\代码\1 bs\000001帖子.csv')

存储结果如下:

image 二、Python情感分析——对爬取的帖子标题进行情感分析 1、snownlp库的简介

很多场景下,我们都需要用到情感分析技术。比如,做金融产品分析,需要根据投资者评论数据来分析投资者情绪;电商交易需要根据买家的评论数据来分析商品的预售率等。那么到底什么是文本情感分析,我们又该如何做文本情感分析呢?

情感分析是根据情感倾向来进行的,而情感倾向最常见的就是喜欢、不喜欢、讨厌等。

目前情感倾向分析的方法主要分为两类:一类是基于情感词典的方法,一类是基于机器学习的方法。这两者主要的区别是,前者需要用到标注好的情感词典;后者则需要大量人工标注的语料作为训练集,通过提取文本特征,构建分类器来实现情感的分类。

下面先简单介绍基于snownlp的评论数据情感分析方法。

snownlp是一个基于Python的情感分析工具库,可以进行中文分词、词性标注、情感分析、文本分类、文本关键词提取等。snownlp的情感值取值范围为0到1之间,值越大,说明情感倾向越积极。但snownlp库有一个缺陷,便是其模型的训练语料是商品购物评论语料,用来做金融领域的情感分类效果一般,但目前还并没有关于金融领域的中文自然语言处理的开源库、语料库。所以这里我们暂时使用snownlp库对股吧帖子进行情感分析。

2、snownlp库的安装

由于Anaconda没有集成snownlp分词库,因此需要安装。安装方式:

打开Anaconda Prompt,选择开始菜单-Anaconda3-Anaconda Prompt。

在命令行中输入:

pip install snownlp -i https://pypi.tuna.tsinghua.edu.cn/simple/

这里使用清华镜像下载,因为访问官方的pypi不稳定,速度很慢。

3、snownlp库的使用

(1)根据文本创建一个 SnowNLP 对象

(2)使用相关的方法(如中文分词、词性标注、情感分析、文本分类、文本关键词提取)进行操作

4、snownlp运用实例

我们在“一、Python网络爬虫——爬取东方财富网帖子信息(以1-10页为例)”获取的帖子信息的基础上,对帖子标题内容进行情感分析,代码如下:

#使用SnowNLP计算对每个帖子标题的文字评估情绪得分 from snownlp import SnowNLP def senti(text): s=SnowNLP(text) return s.sentiments all_data['情绪']=all_data['标题'].apply(senti) all_data.to_csv(r'D:\代码\1 bs\000001帖子+情感.csv')

结果如下:

image

全套代码

#导入相关库 import requests from bs4 import BeautifulSoup import pandas as pd from snownlp import SnowNLP #请求数据,定义函数 def getHTMLText(url): r=requests.get(url) r.encoding=r.apparent_encoding text=r.text return text #解析单个网页,并提取数据字段 def getOnePageInfo(url): one_page_data=[] text=getHTMLText(url) soup=BeautifulSoup(text,'html.parser') post_list=soup.find_all('div',class_="articleh normal_post")#找到所有的帖子所在标签 for post in post_list: read_counts=post.find('span',class_='l1 a1').text #获取帖子阅读数 comment_counts=post.find('span',class_='l2 a2').text #获取帖子评论数 title=post.find('span',class_='l3 a3').text #获取帖子标题 author_id=post.find('span',class_='l4 a4').text #获取作者id time=post.find('span',class_='l5 a5').text #获取更新时间 data=[read_counts,comment_counts,title,author_id,time] one_page_data.append(data) return one_page_data #循环获取多页信息(以1-10页为例) all_data=[] for i in range(1,11): url=f'https://guba.eastmoney.com/list,zssh000001_{i}.html' one_page_data=getOnePageInfo(url) all_data.extend(one_page_data) #extend可以添加列表 #将数据存储至csv文件中 all_data=pd.DataFrame(all_data,columns=['阅读数','评论数','标题','作者','最后更新']) all_data.to_csv(r'D:\代码\1 bs\000001帖子.csv') #使用SnowNLP计算对每个帖子标题的文字评估情绪得分 def senti(text): s=SnowNLP(text) return s.sentiments all_data['情绪']=all_data['标题'].apply(senti) all_data.to_csv(r'D:\代码\1 bs\000001帖子+情感.csv')

Attention:截至发文前,上证指数吧共有8万多页,我们的案例是获取1-10页的,如果是8万多页呢?把10改成8万?

当爬虫频率过高时,会触发东方财富网的反爬机制,如何解决呢?

请听下回分解。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3