如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫
![](http://n4.ikafan.com/assetsj/blank.gif)
# 腾讯控股股吧URL
http://guba.eastmoney.com/list,hk00700,f_1.html
http://guba.eastmoney.com/list,hk00700,f_2.html
http://guba.eastmoney.com/list,hk00700,f_3.html
http://guba.eastmoney.com/list,hk00700,f_4.html
http://guba.eastmoney.com/list,hk00700,f_5.html
f_
后面的数字是不同,很明显这之后跟的数字就是股吧里的页码数。知道这个信息,在写循环的时候就好办了,只要改变f_
后面的数字即可。可能还会有童鞋会问hk00700
是什么?这里我们回顾上图里的蓝色框框可以发现00700.hk
与hk00700
本质上是一样的,都是股票代码,明白这个,如果你想爬取其他公司的股吧标题,只需要更换股票代码即可。selenium
的情况下,该如何根据帖子的列表获取每个帖子的源代码呢?其实很简单,每个帖子标题所在标签的href
属性中都包含着该帖子的链接,这样就可以根据这个链接获取每个帖子的源代码了。再从中提取年月日,本次爬虫的准备工作就完成了。![](http://n4.ikafan.com/assetsj/blank.gif)
先调用本次要使用的库。
import requests
import pandas as pd
from lxml import etree
import time
import 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_list
title.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)
continue
else:
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 :
break
else:
time.sleep(5)
continue
循环停止之后,将爬虫得到的列表放入
dataframe
中进行清洗,删除那些标题为转发,和发帖时间为5月的帖子,然后导出到Excel中即可。
#导入dataframe
stkcd_list = [stk]*len(datatime)
df = pd.DataFrame(data = [title, author, datatime,stkcd_list]).T
df.columns = ["标题", "作者","发布时间","股票代码" ]
#数据清洗
df = df[~df["标题"].str.contains("转发")]
df = df[~df["发布时间"].str.contains("05-")]
#输出到Excel
file = r"./股吧/HK00700股吧.xlsx"
df.to_excel(file, index = None)
得到的文件如下图所示:
![](http://n4.ikafan.com/assetsj/blank.gif)
![](http://n4.ikafan.com/assetsj/blank.gif)
![](http://n4.ikafan.com/assetsj/blank.gif)
赞 (0)