好久没玩过新浪微博,突然来心情想分析下,于是有了这个单线程且慢吞吞的小爬虫。看这图还是很震撼的,提供个我的在线预览版本 传送门 点击拖动,滚轮缩放,在无缩放的时候可以拖节点移动。
本来是想着详细点说一下的,然后发现其实也不难,懒得讲了,无非分两步。1.获取数据。2.制作力导向图。
爬微博很特么烦,我又没那么多ip,只通过切换UA来爬取数据了。我需要的数据大致分为两类:用户数据,关系数据。我用了两张表来存储数据,一张表用来保存队列。
用户表
[id][uid][name][gender][avatar][lv]
关系表
[id][uid][fid]
存储记录的队列表
[id][json]
为了方便,我搞了两个事务:
整个爬虫采用队列存取task,首先入队自己的数据,然后从自己的数据开始爬。
数据爬取完成后自己点击停止,然后等他把队列的的数据保存起来,下次直接恢复爬取。实际上,一般停止都是因为4xx错误了,会自动停止并保存的。这时候一般有4K数据了,你再爬的话,可能渲染不出了,网页会贼卡的。
停止爬虫后,看代码中的out两个类,输出两个js文件。js结构如下:别问为什么
反正结构是这么个结构,有节点,有连线就可以连了,然后就交给d3.js了。网上的教程很多用的v3版本的,我这是用的v4版,svg性能毕竟捉急,虽然canvas也不咋地,但是好歹比svg强。
然后把两个文件拷到v4.html目录下,就行了。然后就打开html等啊等。
源码我放在github上,这里。代码不难,不想看只想装逼的参看这个流程:
在mainThread里面把初始数据改成你的,uid可以在微博手机网页版,点粉丝,然后看网址:http://m.weibo.cn/p/second?containerid=1005053268063401_-_FOLLOWERS 这个3268063401就是uid了。
然后运行main,点击开始,然后等他自己停了,或者你自己点个停止,等他保存完。然后打开out包下的两个类,运行以后输出到c盘,拷贝到v4.html下。
需要注意的是数据库我用的mysql,库为sina,表为trealition,tuser,tqueue。自建数据库然后添加我那两个事务。记得添加gson和mysql的jar包,拒绝小白问题。
ps:有需要初级android开发的么,6月才毕业呢,现在在做车联网设备的公司实习,技能加成:android串口编程,RFID的操作,驾培TCP协议。