自己造轮子——爬取东方财富股吧评论

看到中央财经大学学报上今年三月一篇论文,研究投资者情绪使用的是东方财富股吧的数据(股吧乐子人跌了就骂涨了就夸,估计算是最韭菜的数据了,在实战中甚至有反向指标效果哈哈哈),所以尝试写一个(现学现卖了属于是)小爬虫,来爬取东财的股吧评论。感谢B站、知乎、CSDN大佬的教学以及Chat-GPT、Kimi的答疑与Debug。

导入各种库

因为如果要做实证的话,股吧数据量比较大,所以选择用效率更高的lxml来做解析,而不是BeautifulSoup。

1
2
3
4
5
6
7
8
import requests          
from lxml import etree
#### 这两个库是网络爬虫的核心 ####
import pandas as pd
import numpy as np
#### 这两个老朋友在此主要负责数据的整理和写入 ####
import os
import time

获取User-Agent

在开发者模式下,进入Network,选择一个元素,在标头栏就可以找到User-Agent,复制过来即可,把爬虫伪装成浏览器

1
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'}  # 建议自己获取请求头,我这里填的是公开的

分析目标网页

对于东方财富股吧,如果以最新发帖为线索的话,网址结构如下所示:

https://guba.eastmoney.com/list,股票代码,f_页码.html

需要注意的是,如果是个股那么股票代码是六位代码,比如600030;如果是指数或者场内基金,那么代码要加上交易所,比如半导体ETF:sh512480,具体需要进网站再看一下

所以先确定了要输入的数据:

1
2
user_code=input(['请输入六位股票代码:'])
max_page=int(input(['请输入需要爬取的页数:']))

利用浏览器开发者模式来分析网站结构,可以发现:

1
2
3
<div class="title"><a href="/news,600030,1414922416.html" title="中信不除,天理难容!">中信不除,天理难容!</a></div>

<td><div class="update pub_time">04-06 22:40</div></td>

这样的节点里存储了我们需要的信息,现在要做的就是识别这样的节点在整个Html里的结构,用XPath将其表示出来,然后读取为文档形式。比较方便的做法是右键节点,复制为XPath,然后在这个基础上做调整(因为这样复制下来的仅仅是这一个节点的位置,往往相邻节点并没有被遍历)

例如://*[@id="mainlist"]/div/ul/li[1]/table/tbody/tr[7]/td[3]/div/a

这个XPath表达式用于在HTML文档中定位一个特定的链接(<a>标签)。下面对这个表达式的逐层解释:

  1. //*[@id="mainlist"]:这部分选择所有具有id属性值为mainlist的元素。*代表选择任意元素节点,[@id='mainlist']是一个属性选择器,用于匹配具有特定id值的元素。这通常用于定位页面上的一个特定区域,比如一个列表或者一个特定的部分。

  2. /div:从上一步选择的具有idmainlist的元素中,选择其直接子节点中的<div>元素。这通常是页面布局中的一个容器元素。

  3. /ul:在上一步选择的<div>元素下,选择其直接子节点中的<ul>元素。<ul>通常用于表示无序列表。

  4. /li[1]:在上一步选择的<ul>元素下,选择第一个<li>元素。<li>是列表项,这里通过索引[1]选择第一个列表项。

  5. /table:在上一步选择的<li>元素下,选择<table>元素。这可能表明列表项中包含了表格数据。

  6. /tbody:在上一步选择的<table>元素下,选择<tbody>元素。<tbody>是表格的主体部分,通常包含所有的行和单元格。

  7. /tr[7]:在上一步选择的<tbody>元素下,选择第七个<tr>元素。<tr>代表表格的一行,这里通过索引[7]选择第七行。

  8. /td[3]:在上一步选择的<tr>元素下,选择第三个<td>元素。<td>代表表格的单元格,这里通过索引[3]选择第三列的单元格。

  9. /div:在上一步选择的<td>元素下,选择其直接子节点中的<div>元素。这个<div>可能是用于包裹或样式化表格单元格内容的容器。

  10. /a:在上一步选择的<div>元素下,选择<a>元素。<a>是超链接标签,用于定义链接到另一个页面的地址。

到这里,这个XPath就定位了

<div class="title"><a href="/news,600030,1414922416.html" title="中信不除,天理难容!">中信不除,天理难容!</a></div>

但是,我们需要的是全部评论,而不是这一个评论,所以在第七步,需要删除索引,以此来遍历<tbody>元素下的所有<tr>元素。

所以,最终的XPath:
//*[@id="mainlist"]/div/ul/li[1]/table/tbody/tr/td[3]/div/a

回到这个项目,这里我用了两种XPath的表达方式,分别定位HTML里面的title和time:

/html/body/div[1]/div[3]/div[1]/div[1]/div/ul/li[1]/table/tbody/tr/td[3]

//*[@id='mainlist']/div/ul/li[1]/table/tbody/tr/td[5]/div

利用循环爬取源代码

接下来。需要利用requests来获取网页的源代码,再利用lxml来解析源代码:

注意循环次数不要太大了,稳妥一点在10以下,以防被反爬

1
2
3
4
5
6
7
8
9
10
11
12
13
for page in range(1,max_page+1):
#获取网页源代码
print('crawling the page is {}'.format(page))
url= f'http://guba.eastmoney.com/list,{user_code},f_{page}.html'
response = requests.get(url, headers=headers)
#解析网页源代码
root = etree.HTML(response.text)
title = root.xpath("/html/body/div[1]/div[3]/div[1]/div[1]/div/ul/li[1]/table/tbody/tr/td[3]//text()")
time = root.xpath("//*[@id='mainlist']/div/ul/li[1]/table/tbody/tr/td[5]/div//text()")
pages = np.repeat(page,len(title),axis=0)
all_page.extend(pages)
all_title += title
all_time += time

完整代码与运行结果

最后,进行数据整理和写入CSV,完整代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import requests          
from lxml import etree
import pandas as pd
import numpy as np
import os
import time
user_code=input(['请输入六位股票代码:'])
max_page=int(input(['请输入需要爬取的页数:']))
all_page =[]
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,{user_code},f_{page}.html'
response = requests.get(url, headers=headers)
root = etree.HTML(response.text)
title = root.xpath("/html/body/div[1]/div[3]/div[1]/div[1]/div/ul/li[1]/table/tbody/tr/td[3]//text()")
time = root.xpath("//*[@id='mainlist']/div/ul/li[1]/table/tbody/tr/td[5]/div//text()")
pages = np.repeat(page,len(title),axis=0)
all_page.extend(pages)
all_title += title
all_time += time

data_raw = pd.DataFrame()
data_raw['title'] = all_title
data_raw['time'] = all_time
data_raw['page'] = all_page

mypath=r"D:/"
data_raw.to_csv(os.path.join(mypath+'\\'+user_code+'股吧评论.csv'), index=False,encoding="utf_8_sig")
title time page
中信证券是所有散户的敌人,没有之一。请大家停止使用中信交易股票,把钱转出来去别的 4/7/24 1
抖音上看到海创药业2023年营收为0,中信证券,我一个服字送给你! 4/6/24 1
中信不除,天理难容! 4/6/24 1
不知大家发现没有,每次证券板块向上发动一轮行情前,互联金融如同花顺、财富趋势、大 4/6/24 1
打造国际一流投行方案公布后就买不到了,现在赶紧抢筹吃饱坐享连续涨停快感啊啊啊啊啊 4/6/24 1
所有新股走势基本雷同,下跌都一个样不能全算中信头上,, 4/6/24 1
中信做的其他券商就没做?凭本事收取高手续费何错之有哇? 4/6/24 1
现在散户最希望就是周六日都交易,放假应该调休同步,信仔应该提议国务院,让国务院颁 4/6/24 1
周一直接破19 4/6/24 1
明天接着做空 4/6/24 1
散户要远离近10年中信保荐过的票 4/6/24 1
喂别玩针对,自己友啊!国家企业国家控股,不要这样,二十倍回报,想干嘛,咱们看到了 4/6/24 1
销户中信证券,带中字的垃圾 4/6/24 1
建议信仔回购刺激刺激那些反对的人,3千多亿货币资金,拿50亿回购注销,希望国务院 4/6/24 1
周一砸,只有往下砸出坨坨来。 4/6/24 1
兄弟们小米su7怎么样,可以入手哇? 4/6/24 1
龙龙龙。矿王。下周国企改革重组了!! 4/6/24 1
周一第一目标低价补仓30%高价退出,天气热了季节衣服添加需要资金500元,咱们散 4/6/24 1
今年最惨的就是投资做证券股的。看看分析。 4/6/24 1
轮到华泰了 4/6/24 1
东方财富,GOOD,中信证券,BUCK! 4/6/24 1
完啦!熊手阿券玩完了!红利不见有挨揍稳妥妥的。 4/6/24 1
希望本是无所谓有,无所谓无,这正如地上的路,其实地上本没有路,走的人多了,也便成 4/6/24 1
中信证券IPO全部被撤! 4/6/24 1
跌穿前低考虑建仓 4/6/24 1
估空信哥捞一把,是配资裸沽空,无本套利 4/6/24 1
今年的股票只要继续往上,中信的自营业务就很赚钱,少了投行业务对中信不会有多大影响 4/6/24 1
配资88倍裸沽空中信 4/6/24 1
中信的精准做空,是不是将用户的持仓信息分享给第三方了? 4/6/24 1
中信这是在做空自己吗? 4/6/24 1
有人在多个吧里拿东方财富和中信证券比管理费,并借此发表莫须有言论。他连东方财富不 4/6/24 1
能不能行了。东方证券500万成交量跌这么多。无语了。没法玩。有个几百万就能做空几 4/6/24 1
低开高走 4/6/24 1
失去信用和口碑的公司能走多远 4/6/24 1
笑死了!上市公司营收0元,亏损2.945亿,中信保荐! 4/6/24 1
星期一跌就看你的了 4/6/24 1
券商股不涨,股市没有希望,不要总是把罪恶放在设局人,宽容入局人的贪婪欲望 4/6/24 1
空信证券不倒不服于民 4/6/24 1
十大机构十大券商。对于保荐的股票推荐的股票.预判的价格只能参考不能当真。买入他们 4/6/24 1
海创药业这种也能推荐真是个害人精 4/6/24 1
按照深交所雷厉风行的作风.既然22日深夜公布对中信证券保荐的联纲光电.进行现场督 4/6/24 1
股市中亏钱的也是主流是专业韭菜占80%! 4/6/24 1
销户中信证券已经成为主流 4/6/24 1
礼拜一。看吧。又要买单咯。反正礼拜一我先跑。 4/6/24 1
一季度股市那么好,中信证券业绩大概率超预期!抓紧买入! 4/6/24 1
必须严肃处理,这么多年坑自己人! 4/6/24 1
下周开盘前应该会有调查结果公告 4/5/24 1
中信的名声彻底坏了。 4/5/24 1
中信保荐的这么多公司整么那么多破发哦,听说今年撤回了很多推荐公司是不是觉得那些公 4/5/24 1
有什么利空吗,港股跌这么多。其他券商跌得比中信更惨。 4/5/24 1
大家别羊群效应 4/5/24 1
上市公司营收0元,亏损2.945亿,中信保荐募资10.6亿收5千多万保荐费 4/5/24 1
注册制无错,但为收取高昂手续费的券商定离谱超高发行价才是犯罪。 4/5/24 1
信哥是第一,第一代表什么,开股市让别人第一吃肉你觉得能吗?只要你精神不晃悠,市场 4/5/24 1
已经亏损增加150元,希望明天低开补仓高位割,目标一只本地鸡120元,一瓶啤酒4 4/5/24 1
最强券商数据榜出炉,中信人均是东方财富三倍 4/5/24 1
中信证券,哪一次A股跌,没有中信证券身影?!中信证券是中国股市的最大空头! 4/5/24 1
如果信哥周一18.68低开高走让散户接盘,做一波涨涨涨5个点收获,搞钱吃火锅 4/5/24 1
老套路了。疯狂发消息、压股价、带节奏、收筹码,等到合适的时候宣布收购、整合,打造 4/5/24 1
券商上涨?除了牛市,还需要条件方证证券东华泰证券 中信建投 4/5/24 1
中信好比过街老鼠………人人喊打。 4/5/24 1
板块已经完蛋了,喊人接盘信息一直发 4/5/24 1
港股大跌了 4/5/24 1
罪恶的中信证券 4/5/24 1
据统计,几次牛市的旗手,有色金属和证券平分秋色,美元有降息预期,加上最近有色金属 4/5/24 1
可能被重做 4/5/24 1
远离邪恶的中信吧! 4/5/24 1
太刺激了 4/5/24 1
泡沫来自哪里?明明没那么多钱却还在拼命发新股,体积是大了重量没变所以只能是飘来荡 4/5/24 1
接下来就是杀融资盘,不相信看 4/5/24 1
大家都别买他的股票,让他自己玩 4/5/24 1
可以逢低买入中信证券吗??? 4/5/24 1
新股发不出来券商妥妥的死了 4/5/24 1
港股又跌,哎 4/5/24 1
除非你全仓资源股或空仓,你去买其他证券或者在热门板块也是跟中信走势的,自己心里没 4/5/24 2
A股:动真格了!深交所一日内终止两家IPO发行,且都为中信保荐! 4/5/24 2
深交所突然发布了一则重磅消息:吴主席手起刀落,对位居证券界榜首的中信证券发下了惩 4/5/24 2
远没跌到位。 4/5/24 2
据财联社不完全统计:共有42家A股上市公司发布2024年一季度业绩预告。其中14 4/5/24 2
一边表示看多后市,一边赎回份额!公募的诚? 4/5/24 2
跌近二周了,短线可搏反弹 4/5/24 2
人家反向资本很懂抓住机会的,你们不是不喜欢中信吗,就逮着这个来炸,就利用这个机会 4/5/24 2
中信是做空老主力。就看星期一入不入坑。 4/5/24 2
即将ST 4/5/24 2
埋两个单子,礼拜一不看了。 4/5/24 2
特变电工分红,不要伪价值投资 4/5/24 2
大家换证券… 4/5/24 2
臭名昭著的中信 4/5/24 2
每年到这时候证券股拉一波 4/5/24 2
证券死很惨 4/5/24 2
注销中 4/5/24 2
一季度业绩肯定非常好,二三月股市大牛市! 4/5/24 2
港股证券怎么回事啊,我TM重仓证券基金啊 4/5/24 2
周三尾市清仓配资88倍裸沽空中信证券,坐等一夜暴富,来钱快 4/5/24 2
还没消户的抓紧了,呀。 4/5/24 2
消户这家公司,太黑! 4/5/24 2
港股没怎么跌,中信跌那么多,没有降息预期,货币不宽松,难怪券商一直跌,大盘被黄金 4/5/24 2
中信证券:被现场督导,股民叫好为何? 4/5/24 2
周一这货又费了。 4/5/24 2
销户是可以做的,其他拿他没办法 4/5/24 2
不开户、不买它的产品、不买它保荐的股票。 4/5/24 2
周一就卖,永远不来 4/5/24 2
我没持有中信证券的股票,但是我在中信有账户。现在正在逐步卖出转移到其它证券,然后 4/5/24 2
实话实说:财务造假,股价从上市28跌到3块,谁买谁亏! 4/5/24 2
10块不知道能不能止跌,节后跌停板见 4/5/24 2
回看这下跌1100点的3年熊市。 4/5/24 2
今年根本就没有牛市,券商怎么可能涨呢? 4/5/24 2
假期全是利空,下周一一起踩踏吧,16元一定可以到。 4/5/24 2
还将下跌30+! 4/5/24 2
港股券商股大跌 4/5/24 2
持续阴跌十五年 4/5/24 2
要准备跌破前低了,散户们团结起来 4/5/24 2
证券股竟然还有人去参考港股走势 4/5/24 2
去年整个股市下跌,成交量过8000都没有几天。今年开局多数时候都维持万亿级别成交 4/5/24 2
港股跌了4个点,吓死人 4/5/24 2
20你平均线14.84见不骗你 4/5/24 2
抓紧时间抄底 4/5/24 2
唱空消息满天飞的原因 4/5/24 2
业绩下滑,保荐又取消两家,销户增加。破前低是大概率! 4/5/24 2
也就值2元! 4/5/24 2
美国三大指数暴跌,快,中信证券带领大盘向下砸 4/5/24 2
中证协称,近年来,证券行业锚定“一流投行”目标,在资本实力、风控能力、业务模式、 4/5/24 2
有一堆专业唱空的,不是坏就是很坏 4/5/24 2
以后的券商不会依赖国内的IPO项目了,前几天的文件也给出券商自营很大的空间,自营 4/5/24 2
我们是专业的散户套套生产商,来一个套一个,来两个套一双 4/5/24 2
满屏讨伐口嗨证券的。大户口融资去狂买证券,啊反向赚钱的量化北向投资资金,绝对会阴 4/5/24 2
什么时候挝几个 4/5/24 2
赚了黑心钱,名声都搞臭了,啧啧 4/5/24 2
券商补跌行情,回到最初的低点七块钱 4/5/24 2
而已。都已经抛了。中信证券一季报亏惨不忍睹。 4/5/24 2
一季报亏损。 4/5/24 2
为什么交易所上班不随法定节假日? 4/5/24 2
下周应该有个象万科、太保一样的闸刀阴。 4/5/24 2
都不要买中信!!!!! 4/5/24 2
建议把头部券商公司保荐上市公司数据、股指期货空单申报率、在转融通中进行的融资融券 4/5/24 2
中信证券布大坑 4/5/24 2
一季度将大幅亏损,股票大跌阴跌开始! 4/5/24 2
不会在做w底吧 4/5/24 2
这吧里怎么还有人,该卖的卖,该消的消 4/5/24 2
大家爽了,证券一直接,科技也被打回原形,皆大欢喜,人人满意 4/5/24 2
做空中信证券 4/5/24 2
牛市要来了?近日,深交所已终止皓吉达、洲宇设计、华艺生态、方向电子、速迈医学等5 4/5/24 2
中信证券你总是不涨,口水都要淹死你,星期一来个涨停,什么话都不攻自破,这老总这个 4/4/24 2
一哥位置很快不保了,东方财富接班了 4/4/24 2
等16元开始分批买,因为2016年14元割肉走了就没再买。但愿这次能给机会!! 4/4/24 2
降息就在眼前了,大牛不远了,每次券商都是排头兵,这么多看空的托准备吸筹哪。用脚投 4/4/24 2
鳄鱼的眼泪 4/4/24 2
渣渣 4/4/24 2
保荐人中信拿了太多刚上市的发新股,砸不完根本砸不完。 4/4/24 2
中信证券的股还有哪些,大家提醒一下,我好回避 4/4/24 2
这股将是长期下跌趋势。 4/4/24 2
销户中信,我们散户团结起来,加油! 4/4/24 2

小结

缝缝补补又造了一个轮子,希望接下来的情感分析能顺利,也希望能复现一下央财学报上那个用卷积神经网络来做情绪分析的文章,当然,能不能复现还是要看有没有现成的教程了,哈哈


自己造轮子——爬取东方财富股吧评论
http://example.com/2024/04/07/自己造轮子——爬取东方财富股吧评论/
作者
cyx94a
发布于
2024年4月7日
许可协议