Python, 数据库

Simwe论坛下ABAQUS板块的简单爬虫实践

最近作者突然兴起,根据自己已有的基础结合百度搜索,对simwe论坛下的ABAQUS板块帖子进行了简单的爬虫和数据处理,算是入门的练手项目。

背景介绍:simwe论坛是国内专业的仿真论坛,经过尝试发现网站不存在反爬虫策略,基本内容的爬取也无需模拟登陆,对于初学人员还是挺不错的,在此提醒,切勿频繁爬取而给网站服务器增加过多负载。

首先分析网页url,察看simwe中abaqus板块的url:http://forum.simwe.com/forum-31-1.html,通过翻页发现url最后1位同步发生变化,所以通过循环爬取时仅需要改变最后1位的页码值。

整个板块下2800多页,为了实现快速爬取而不致电脑卡死,分成三部分爬取即1~1000,1001~2000,2000~,这样能够比较快的将数据爬取下来。

由于整个项目数据大概8万多条,为了便于存储和操作,使用MongoDB存储爬取的帖子,内容分别是帖子标题、作者、浏览数以及回复数,对应的代码如图1所示。本来开始作者是希望爬取发帖子时间的,但是分析了代码之后发现,对于7天以内发布的帖子对应的前端代码与7天以后的并不一致,这就需要一个日期上的比较,内容的提取相对麻烦,暂时先不考虑,后续在统一完善这部分内容。部分代码如下所示。

for i in range(1000):
      drive.get('http://forum.simwe.com/forum-31-'+str(i+1)+'.html')
      soup=BeautifulSoup(drive.page_source,'xml')
      title=soup.find_all('a',{'class':'s xst'})
      bys=soup.find_all('td',{'class':'by'})
      nums=soup.find_all('td',{'class':'num'})
      authors=soup.find_all('cite')

图1 涉及的代码部分

经过运行后最终爬取结果存入MongoDB如图2所示,数据量将近85000条,如图2所示。

图2 数据存储结果示意图

然后作者基于上述数据作了简单的分析,筛选了浏览量排在前10的帖子及作者(Top10浏览量,如图3和图4所示),同时结合wordcloud和jieba分词等强大的python库,绘制了了前100位浏览量帖子标题组成的词云,如图5所示。

图3 Top10浏览量及作者

图4 Top10帖子标题漏斗图

图5 Top100标题词云

从数据结果可以看到,除去斑竹发布的一些内容通知,比较热门的还是一些教程和干货资料,大家对诸如详细资料字样的帖子感兴趣,其中很意外涉及扩展有限元XFEM的帖子浏览量竟然非常大,察看该帖子也确实干货味较浓。

当然还可以爬取更多内容作分析,比如前面提到的将帖子发布的时间爬取下来,分析每个月、每年的发帖数量,这样可以得到整个板块历年的活跃情况,这个还是很有意义的,后面待完善,有兴趣的朋友可以继续。

此外,还可以基于现有爬取的数据统计该板块下发布过帖子的作者人数。如果在进行深入的爬取,可以对每个人的个人信息进行统计,包括性别、年龄、爱好等,当然本论坛中个人信息不够完善,也没有分析的必要。

以上为作者个人的简单爬虫实践,欢迎大家拍砖,原代码如果后续完善的可以的话则将上传。

小民同学

Author: 小民同学

互联网+“数值模拟工程师”!

发表评论

电子邮件地址不会被公开。 必填项已用*标注