首页 > 经验记录 > java > 网络爬虫实现-拔取数据为bangumi动画排行榜(共4586部动画)

网络爬虫实现-拔取数据为bangumi动画排行榜(共4586部动画)

  以bangumi动画为例= =

成果,总共四千多个(最后一名是雷锋的故事

这个图是我给扒下来的数据保存到mysql数据库了在导出的excel文件

还有用IO流输出的txt文件和DOM转换的xml文件就懒得放了

废话不多说,上代码

 


Anime类
private int id;//排名
private String name;//名字
private String oldName;//原名
private String message;//信息
private double rating;//分数
private int number;//评分人数
private String imagePath;//图片地址
还有getset方法和toString方法,就不贴了



完成思路:
按照bangumi动画排行榜的域名,设定的符合查找标准的for循环。
其域名的标识是直接从1-191顺序排列,故建立一个从1开始循环到191的for循环。
建立一个只有单个线程的线程池,虽然速度比多线程有所降低,但是由于其只有一个线程,所以会按照顺序从1-191页读取数据
避免了多线程导致的顺序混乱问题。
根据面向对象的思想,咱是个指挥官,你怎么完成是你的事情,只要你能达到效果,我只管调用方法就是了
我需要的结果就是,这个for循环给我转完后,我的List集合里就存了[bangumi动画排行榜里的所有的动画对象]
直接让线程池中的线程执行写好了的AnimeSpider线程,把要扒的域名、接收数据的集合、闭锁给传过去。完事。
List集合拿到了,也就是四千多个动画对象拿到了,然后就可以随意操作了
调用我写好了的WriteAnimeTXT.writeAnime(animes);WriteAnimeXML.writeAnime(animes);
MybaseInsert.insert(animes);writeImage(animes);这些我写好了的方法,做到输出为txt、xml、保存到数据库、下载图片等等
方法我都写进来了,共四页
解释下闭锁:
CountDownLatch类,创建时可以指定一个int类型的数字,在数字到0之前,await()将一直阻塞,使程序停止在这个位置。直到数字归零
在这使用是为了让线程都走完,也就是说要让List集合里已经存了bangumi动画排行的所有数据后,在执行后面的方法
使用CountDownLatch中的方法countDown()可以使数字减一

主类

 

 

AnimeSpider类,即在主方法中new了191次的线程

 

 把集合中的数据转换为TXT文件保存在工程的根目录

 

把集合中的数据保存为XML文件,用的是DOM创建节点的方式,一个个创建节点并赋值,给予其层次关系
再将已经创建好的Document对象树转换为XML

 

把图片下载到电脑里

 


1 COMMENT

EA PLAYER &

历史记录 [ 注意:部分数据仅限于当前浏览器 ]清空

      00:00/00:00