利用python爬取东方财富网股吧评论并进行情感分析(一)

本文介绍了使用Python爬取东方财富网股吧评论的过程,包括分析网页源代码,识别数据标签,以及获取每个股吧页面的评论并保存到Excel。尽管遇到标题内容不全的问题,但通过详细页爬取得到了完整数据。作者是一名金融专业的研究生,学习爬虫进行项目研究,后续计划进行情感分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用python爬取东方财富网股吧评论(一)

python-东方财富网贴吧文本数据爬取

分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论。涉及内容在前人的研究基础之上,探索适合自己一些知识点,本人非计算机专业,金融专业,学习爬虫用于项目研究,以此发表供大家学习与指点。

一、论文说明

论文需求:股吧中人们发表的评论和创业板股市价格波动
数据来源:东方财富网创业板股吧
数据标签:阅读、评论、标题、作者、更新时间,
实现功能:读取每个股吧的全部页面的评论并写入excel表中

二、实施过程

1.明确评论数据

我们需要爬取的是东方财富吧中全部发帖信息的阅读、评论、标题、作者及最后更新时间这五个字段的数据,我一开始想也不是很难,解析一下网页匹配一下对应的标签值就可以了,但后面还是出现了各种各样的问题,需要大家留意。

2.查看网页源代码结构
① 网页源代码
首先打开网页的开发者工具(右击-检查)或者右击网页源代码,在源代码中查找对应字段的标签。
以下是大多数学者的分析:

第三方库:snownlp、tushare、pandas、numpy、matplotlib getData:从东方财富网旗下的股吧论坛爬取数据 SQL:用到的数据库操作函数 quantilizeSentiment:量化情绪指数,生成excel文件便于后面进行情绪指数和股票价格涨幅相关度的量化分析(股票价格历史数据来自tusharepro网站,可以免费获取) result:传入某只股票代码,返回情绪指数结果(主要关注此文件即可,其他爬虫分析之类的我后面放到云上,爬取的数据都放入云数据库中) analyze:进行情绪指数和股票价格涨幅相关度分析、数据可视化 爬取后的数据存储在云端数据库中: db = pymysql.connect(host="116.62.46.214",user="dfcf",password="iJHPFZnRjXacNi6p",db="dfcf",port=3306) 接口说明(重点!!!): 函数: def data(share_code):#计算情绪指数 传参:share_code 股票代码(例如:zssh000001)上证指数 返回参数:result 情绪指数 例如: if __name__ == '__main__': result=data('zssh000001') #传入股票代码参数 print(result) #打印情绪指数结果 实现功能:根据传入的股票代码到东方财富网旗下的股吧对应的某股票分论坛爬取当天的用户评论信息,爬取的数据存储到MySQL中,之后再将数据进行统计计算出该股票当天的市场情感趋势。 执行流程 1、输入股票代码 2、清空数据库上天的评论信息 3、使用爬虫爬取当天东方财富网股吧论坛中该股票的股民评论信息进行数据清洗过滤,筛选出有效信息,存入MySQL数据库 4、使用金融情感计算模型进行文本数据分析 5、得出该股票当日的情绪指数 6、返回情绪指数值 计算情绪指数具体算法实现 借助自然语言处理中的情感分类技术。按照正常的处理流程,需要搭建模型、准备语料库、训练模型、测试模型然后得到个情感分类的模型。但这里,时间有限,所以直接使用现有的模型。snownlp是个中文的开源的自然语言处理的Python库,可以进行分词、情感分类等。在本项目中可以直接使用它来量化出某日市场投资者的整体情绪。量化的方法有许多种,可以将某日所有的评论情绪得分得分相加再求评价,也可以求某日情绪得分大于0.5的评论所占的比例。 项目所采用的方法: 将情绪得分>0.6的评论当作积极评论,小于0.4的评论当作消极评论。 设置变量neg和pos,存储某日市场的积极情绪因子和消极情绪因子。关于neg和pos的计算方法,以neg为例: 初始化为0,若某日的某评论comment的情绪得分<0.4 neg=neg+1+log(该条评论的点赞数+该条评论作者的粉丝数+1,2),其中log(x,2)表示以2为低的x的对数。考虑该条评论的点赞数和该条评论作者的粉丝数是因为考虑到不同的评论的质量不同。取对数是为了让数据更加平滑,防止极值过大。+1是为了防止该条评论的点赞数和该条评论作者的粉丝数都为0。 计算某日市场的总体情绪得分score。设计的模型是: score=log((pos/(pos+neg+0.0001)-0.5)*(该日评论总数+1)) (pos/(pos+neg+0.0001)-0.5)的意思是计算市场的情绪倾向,**大于0表明市场积极情绪情绪较强,越接近0.5越强。小于0反之。**后面的(该日评论总数+1),是因为某日投资者的评论越多,代表市场投资者情绪的波动越大。
### 使用 Python 实现东方财富网股吧评论的数据抓取 为了从东方财富网股吧获取评论数据,可以采用 `requests` 和 `BeautifulSoup` 库来简化网页请求和解析过程。下面是个完整的例子展示如何完成这操作。 #### 安装依赖库 首先安装所需的第三方模块: ```bash pip install requests beautifulsoup4 lxml ``` #### 编写爬虫代码 接下来是份用于抓取指定股票页面上最新帖子列表及其链接的脚本: ```python import requests from bs4 import BeautifulSoup def fetch_guba_comments(stock_code='603121', page=1): url = f'http://guba.eastmoney.com/list,{stock_code},f_{page}.html' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 " "(KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(url=url, headers=headers) soup = BeautifulSoup(response.text, 'lxml') articles = [] article_list = soup.find_all('div', attrs={'class': 'articleh'}) for item in article_list: try: title_tag = item.select_one('.l3>a') reply_count = int(item.select_one('.l2').text.strip()) if not title_tag or reply_count == 0: continue link = 'http://guba.eastmoney.com' + title_tag['href'] title = title_tag.text articles.append({ 'title': title, 'link': link, 'replyCount': reply_count }) except Exception as e: print(f"Error processing {item}: ", str(e)) return articles if __name__ == '__main__': stock_id = input("请输入要查询的股票代码:") comments = fetch_guba_comments(stock_code=stock_id) for comment in comments[:min(5, len(comments))]: print(comment) ``` 此段代码定义了个名为 `fetch_guba_comments()` 的函数,它接受两个参数:个是目标股票的编号,默认设置为 `'603121'`; 另外个是页码数,默认为抓取第页的内容[^1]。 该函数会返回个字典组成的列表,其中包含了每篇文章的标题、回复数量以及文章的具体网址。最后,在主程序部分调用了这个函数打印出了前五条记录作为示例输出[^2]。 需要注意的是,实际应用时应当遵循网站的服务条款,考虑加入适当的延时机制以减轻服务器负担;此外还可以进步扩展功能比如保存到数据库或者文件中等[^3]。
评论 56
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值