美文网首页Java 杂谈Java 后台开发Java实战
闲暇时光,我抓取了一批素材

闲暇时光,我抓取了一批素材

作者: 不孤独的字符串 | 来源:发表于2019-02-17 10:46 被阅读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

    相关文章

      网友评论

        本文标题:闲暇时光,我抓取了一批素材

        本文链接:https://www.haomeiwen.com/subject/nntgeqtx.html