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

# 腾讯控股股吧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.hk与hk00700本质上是一样的,都是股票代码,明白这个,如果你想爬取其他公司的股吧标题,只需要更换股票代码即可。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中即可。
#导入dataframestkcd_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)
得到的文件如下图所示:



赞 (0)
