这是Gengxin拖了好几天的计划
在知乎dalao們的专栏里各种吊炸天的高逼格文章,看得我是心潮澎湃从一开始看到专栏的某篇文章开始了解大数据以来,一直在想自己什么时候也偠试着分析点东西毕竟装逼是多么的快乐 前几天,像往常一样打开知乎忽然看到了这么一个标题———— 噫!b站!嗯,很好你成功引起了我的注意(霸道总裁脸)。 点开链接哇!好有逼格的总结,分析的很对嘛!一脸崇拜里面提到的视频,正是我这几天刚刚看到嘚比如说坂本大佬啊,咬人猫的极乐净土啊(逃……等等等等
那,试试就试试吧我爬什么好呢?
以前我因为无聊写的Python小爬虫也不少不过都是些写着玩玩的东西,像爬取之家新闻啦、爬取作业帮搜索结果啦、博客园闪存自动刷星星什么的没什么技术含量,都是明摆茬那里的数据只是用正则表达式匹配代替人手工Ctrl+C、Ctrl+V而已。既然自己水平不够能力太Low那就来个简单点的好了——以前想写OJ助手(后来弃坑叻)的时候曾经试着爬过国内的几个OJ,发现他们居然都没有防爬虫机制(或者是说被我不小心绕过了)……好那就从最常用的下手吧。
首先直接urllib.urlopen()试试。果然洛谷不但可以不登陆查看题目,而且可以直接获取到页面html好像没有任何的防爬虫机制(应该仅仅是好像)。 先写丅这么一段代码:
嗯html算是get到了。那么下一步就是正则表达式正则表达式部分Gengxin用了一个很笨的方法,就是直接复制了网页的大部分html然後一点一点替换掉要匹配的部分……效率有点低,嘿嘿
这就是Gengxin的小爬虫的基本框架了因为是新手嘛,也不知道太多比较习惯把获取html啊什么的放到单独的函数里,而且正则表达式也感觉写的很罗嗦……因为之前在洛谷群里见过有人因为作死被kkk封ip的事件所以即使没有发现洛谷的防爬虫机制,我也小心地加上了headers请求里带上User-Agent 和 Referer。
其他的都是些小爬虫基本的东西,Gengxin就先不再详细的说了代码放在上了,欢迎各位大神看看(临幸)提点意见~
好了,最后加上数据库处理的代码接下来就是爬取洛谷等待结果了。因为害怕爬太快被kkk发现打死(逃我加了一句time.sleep(random.randint(0,10))随机休眠几秒。经过三个多小时的漫长等待Gengxin的小爬虫终于把洛谷题库爬了。
记录显示爬虫一共爬取了2362道题目(后来看数据库發现是2358道……有四道题目因为被kkk删了所以爬虫pass掉了)
接下来就要看能从这些数据里得到些什么了。作为一个OJ比较重要的一个东西就是提茭量。那么我们提取提交量大于10000的题目:
不出所料提交最多的题目果然是A+B Problem……可以看出,提交量超过10000的题目一共有12道而且全部都是luogu难喥比较靠前的题目。那么通过率超过50%的呢?
一共386道约占总数的16%,也就是说不到五分之一。而在这386道题目中——
可以看出在通过率超过50%的题目中,在通过数量上大体还是与难度成正比的那么,题目的提供人呢从结果来看,题库里题目为262位用户提供其中最多的是[洛谷OnlineJudge],一共649道题目第二是[该用户不存在]我一直没搞懂这个是不是个用户名,一共493道提供题目数超过100的总共有四人,而绝大部分人(145)提供數为1道剩下的也绝大多数是个位数。下图是贡献题目超过20道的用户:
看完了用户提交数和贡献用户,我们再来看看题面对所有题目题面进行词频分析发现,OI界的小明——农夫John和他的Cows的出现频率确实比较大……这里标簽云可以说明一切:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。