打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫

然后先把现在的网址记录下来,再将随后几页的网址也记录下来,放在一起比较,观察我们网址的规律,便于后续写循环。得到网址如下:
# 腾讯控股股吧URLhttp://guba.eastmoney.com/list,hk00700,f_1.htmlhttp://guba.eastmoney.com/list,hk00700,f_2.htmlhttp://guba.eastmoney.com/list,hk00700,f_3.htmlhttp://guba.eastmoney.com/list,hk00700,f_4.htmlhttp://guba.eastmoney.com/list,hk00700,f_5.html
可以看到网址的大部分都是相同的,只有f_后面的数字是不同,很明显这之后跟的数字就是股吧里的页码数。知道这个信息,在写循环的时候就好办了,只要改变f_后面的数字即可。可能还会有童鞋会问hk00700是什么?这里我们回顾上图里的蓝色框框可以发现00700.hkhk00700本质上是一样的,都是股票代码,明白这个,如果你想爬取其他公司的股吧标题,只需要更换股票代码即可。
接下来我们使用Xpath来对标题、作者和发帖时间进行定位,如何使用Xpath进行定位本公众号之前有很多推文都讲过,这里就不再赘述了。得到定位信息之后,还不能立即着急进行爬虫,因为还要设置爬虫的终止条件。本次爬虫我们只要腾讯控股股吧6月份的标题,由于是倒序排列,那就需要我们在爬到五月份的时候停止。但是,观察发帖时间发现这些时间信息只包含日期和月份,并不包含年份,如果想要爬取三年、五年的时候该怎么设置爬虫的终止条件呢?想要达到这个目的,就要用到一些二次爬虫的技术了。
首先,如下图打开一个帖子,发现红框框中有年月日信息,这样就可以提取红框框中年月日来作为终止条件了。在不使用selenium的情况下,该如何根据帖子的列表获取每个帖子的源代码呢?其实很简单,每个帖子标题所在标签的href属性中都包含着该帖子的链接,这样就可以根据这个链接获取每个帖子的源代码了。再从中提取年月日,本次爬虫的准备工作就完成了。

二、具体操作
好了,本次爬虫的思路在上文中已经描述完了,现在就开始实操吧!
  • 先调用本次要使用的库。

import requestsimport pandas as pdfrom lxml import etreeimport timeimport os
  • 然后设置股票代码,并准备几个空列表,用于装取爬到的标题、作者和时间等信息。

stk = "hk00700"title=[]author=[]datatime=[]
  • 接着使用requests来获取网页源代码,并根据Xpath定位获取我们需要的信息。这里只是对第一页进行爬虫,想要爬取多页通过循环更改f_后面的数字即可。因为time_list每页包含81项,其中首项为“发帖时间”四个汉字,所以为了与标题列表匹配,要对其进行切片处理取后80项,同理对author_list做同样处理。

url = "http://guba.eastmoney.com/list,hk00700,f_1.html"response = requests.get(url)tree = etree.HTML(response.text)
title_list=tree.xpath("""//*[@id="articlelistnew"]/div/span[3]/a/text()""")author_list=tree.xpath("""//*[@id="articlelistnew"]/div/span[4]//text()""")time_list=tree.xpath("""//*[@id="articlelistnew"]/div/span[5]/text()""")time_list = time_list[1:] #处理time_listtitle.extend(title_list)author.extend(author_list)datatime.extend(time_list)
  • 再然后设置终止爬虫的判断条件,只需要判断每页最后一个帖子即可。在这一步,先从标题的标签的href属性里获取链接的一部分,再拼接上网址的前一部分"http://guba.eastmoney.com"即可获得帖子的正确链接。接着从提取发帖时间的年月日,要注意的是,如果某页最后一个帖子是有机构发布的资讯,那么我们提取信息的列表会返回空值。这时候需要设置一个判断语句,当遇到这种情况程序选择立即执行下一循环,否则提取年月日信息,并利用年月日判断是否满足终止循环的条件。具体如下:

#从标题的href属性获取testurl_list = tree.xpath("""//*[@id="articlelistnew"]/div[81]/span[3]/a/@href""")test_url = "http://guba.eastmoney.com" + testurl_list[0]response_2 = requests.get(test_url)#获取帖子中的日期tree = etree.HTML(response_2.text)test_list = tree.xpath("""//*[@id="zwconttb"]/div[2]/text()""")if test_list == [] :    time.sleep(5)    continueelse:    post_year = test_list[-1][4:8]    post_month = test_list[-1][9:11]    print(post_year,post_month)
#如果某页发帖时间为2021年5月,则停止循环if int(post_year) == 2021 and int(post_month) ==5 :    breakelse: time.sleep(5) continue
  • 循环停止之后,将爬虫得到的列表放入dataframe中进行清洗,删除那些标题为转发,和发帖时间为5月的帖子,然后导出到Excel中即可。

#导入dataframe    stkcd_list = [stk]*len(datatime)df = pd.DataFrame(data = [title,  author, datatime,stkcd_list]).Tdf.columns = ["标题", "作者","发布时间","股票代码" ]#数据清洗df = df[~df["标题"].str.contains("转发")]df = df[~df["发布时间"].str.contains("05-")]#输出到Excelfile = r"./股吧/HK00700股吧.xlsx"df.to_excel(file, index = None)
  • 得到的文件如下图所示:

再提醒大家最后一句,当你频繁访问东方财富股吧的时候是会触发反爬机制的。所以,在爬虫时请不要设置太快的请求频率哦~
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
分享一个使用Python抓取东方财富股吧的帖子内容的代码
自定义爬虫函数展示,3分钟可更新全部数据
【Python | 杂代码】爬虫,从基础到进阶(一)
抓取了《大秦赋》所有数据,我发现了这些秘密
单线程、多线程和协程的爬虫性能对比
Python 数据解析:从基础到高级技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服