本文作者:任 哲,中南财经政法大学经济学院
本文编辑:陈梦华
技术总编:王子一
Stata&Python云端课程来啦!
为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》、《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦!

# 腾讯控股股吧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)
得到的文件如下图所示:



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
利用Python构建马科维茨有效边界
rangestat,让统计量灵活滚动起来!
听说这样做立项成功率更高哦
如何处理缺失值?这一篇搞定!
善用dataex命令,高效沟通你我他
大数据下的大学分数线排行榜,快来围观!
《觉醒年代》—带你回到百年前
用Stata画的三维图很奇怪怎么办?
如何随机生成满足特定数据特征的新变量?
爬取无法翻页网页——自然科学基金项目及可视化
爬取京东评论数据进行情感分类
Stata与音乐之间的酷炫连接
高校经管类核心期刊发文排行榜
疯狂的科研创新加速器——Stata!
可盐可甜,“粽”有所爱,快来pick你最爱的粽子吧!
好玩有趣的手绘图形库——cutecharts
爬虫实战|摩尔庄园微博话题讨论
一季度财报出炉,哪些公司最烧钱?
一季度财报出炉,哪些公司最赚钱?
技能篇 | 图片合并大法
批量空气质量数据文件合并分析
Stata17之日期时间新功能
Stata17之Lasso新功能
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

