闲暇时光,我抓取了一批素材
2019-02-17 本文已影响38人
不孤独的字符串
webCollector 提供精简的的 API,只需少量代码即可实现一个功能强大的爬虫。webCollector 致力于维护一个稳定、可扩的爬虫内核,便于开发者进行灵活的二次开发。内核具有很强的扩展性,用户可以在内核基础上开发自己想要的爬虫。
以上内容摘抄于开源社区对webCollector的介绍。webCollector是Java的一个开源爬虫框架,封装了 Jsoup,支持多线程操作,爬取速度非常快。框架提供了visit()、addSeed()、addRegex()和start()等方法方便我们对目标网页进行操作。参考文档链接:https://www.oschina.net/p/webcollector
常用方法解析
- visit:核心方法,在整个抓取过程中,只要抓到一个页面,webCollector都会回调该方法,并传入一个包含了该页面所有信息的page对象。
- addSeed:添加种子链接,种子链接会在爬虫启动之前加入到抓取信息中并标记为未抓取状态,可以简单理解为爬虫启动的入口。
- addRegex:设定一个url的正则表达式,过滤不必抓取的链接比如.js、.jpg、.css等,或者指定抓取链接的规则。
- start:启动爬虫,start(5)表示抓取的深度为5层。
爬虫的深度可以理解为:当只添加了一个种子, 抓这个种子链接为第1层,解析抓取这个种子链接得到数据,根据正则过滤数据得到想要的链接保存至待抓取记录,抓取这些新得到的链接则为第2层,依次类推。
音乐素材获取
这里我使用webCollector抓取了包图网上的音乐素材(标题、访问链接),项目使用maven管理jar包,实现思路整体如下:
- 继承BreadthCrawler,重写构造方法和visit()方法
- 在构造方法中设置采集规则
- 在visit()中利用正则表达式匹配抓取到链接,得到我们要的链接
- 根据page对象和网页的结构,获取想要的数据
- 调用start()方法启动爬虫
源代码:
public class MusicCrawler extends BreadthCrawler{
/**
* 重写构造方法
* @param crawlPath
* @param autoParse
*/
public MusicCrawler(String crawlPath, boolean autoParse) {
super(crawlPath, autoParse);
//添加种子页面
this.addSeed("http://ibaotu.com/peiyue/11-0-0-0-0-1.html");
//设置采集规则的类型网页
this.addRegex("http://ibaotu.com/peiyue/11-[0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+\\.html");
//设置线程数
this.setThreads(5);
//不匹配图片
this.addRegex("-.*\\.(jpg|png|gif).*");
//爬取URL上限
getConf().setTopN(50000);
}
public void visit(Page page, CrawlDatums next) {
String url = page.url();
if(page.matchUrl("http://ibaotu.com/peiyue/11-[0-9]+-[0-9]+-[0-9]+-[0-9]+-[0-9]+\\.html")){
String title = page.select("div[class=audio-info]>a").first().text();
String audio = page.select("audio>source").attr("src");
System.out.println("title:\n"+title);
System.out.println("audio:\n"+audio);
}
}
public static void main(String[] args) throws Exception{
MusicCrawler musicCrawler = new MusicCrawler("crawl",true);
//设置爬虫深度
musicCrawler.start(5);
}
}
运行效果.png
最后源码已托管到码云,访问地址:https://gitee.com/hsfeng/musicCrawler