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

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

网址:

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、解析数据

我们需要获取的是”阅读数”、“评论数”、“标题”、“作者”、“最后更新”这五个信息,这五个信息分别位于<span></span>行标签内,对应的属性分别是"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万?

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

请听下回分解。

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容