爬虫

来源:互联网 发布:c语言cgi编程 编辑:程序博客网 时间:2024/04/29 22:02

DescriptionCrawler.java

package com.bjsxt.crawler;import java.util.regex.Matcher;import java.util.regex.Pattern;import org.jsoup.select.Elements;import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;import cn.edu.hfut.dmic.webcollector.model.Page;import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;//深度抓取(深度抓取指从首页往下抓几层)public class DescriptionCrawler extends BreadthCrawler{    //构造函数   String crawlPath抓取的路径    boolean autoParse是不是自动解析    public DescriptionCrawler(String crawlPath, boolean autoParse) {        super(crawlPath, autoParse);        // TODO Auto-generated constructor stub    }    //访问时,对当前页面怎么处理     @Override    public void visit(Page page, CrawlDatums cd) {        // TODO Auto-generated method stub        System.out.println("====================我是可爱的分割线==============================");        System.out.println(page.getUrl());        //System.out.println(page.getHtml());        Elements title = page.select("div.tinfo>h2");//获取当前页面的Document文档对象        System.out.println("标题:" + title.text());//text表示获取标签内部的纯文本        //测测你有多了解奥运会? 13754人测试过   0次收藏   2016-08-06 10:00:00   69条评论 本测试共 10  题        String text = page.select("div.tinfo").text();         //利用正则表达式对数据进行筛选,利用5个分组获取我们需要的数据        //()代表分组,\\d表示数字   {1,}表示至少有一个数字,长度不限     (.{19}) .代表任意字符  2016-08-06 10:00:00  一共19个字符        String regex = " (\\d{1,})人测试过   (\\d{1,})次收藏   (.{19})   (\\d{1,})条评论 本测试共 (\\d{1,})  题";        Pattern p = Pattern.compile(regex);//获得正则对象    compile编译   Pattern正则表达式对象        Matcher m = p.matcher(text);//获得比较器,从而获得比较结果,这里要把原始的字符串传递进去        while(m.find()){//通过循环获取比较结果            String testnum = m.group(1);//测试人数            String favnum = m.group(2);//收藏数            String createTime = m.group(3);//时间            String replynum = m.group(4);//评论            String questionNum = m.group(5);//题目            System.out.println(testnum + "|" + favnum + "|" + createTime + "|" + replynum + "|" + questionNum );        }        Elements img = page.select("div.tshow>p.pbox>img");        System.out.println("图片地址为:" + img.attr("src"));        System.out.println("描述信息:" + page.select("p.tdesc").text());        System.out.println("====================我是可爱的分割线(结束)==============================");    }    public static void main(String[] args) throws Exception {        //构造函数中两个参数分别抓取器的id与是否解析网页true        DescriptionCrawler dc = new DescriptionCrawler("dc" , true);        //定义抓取的入口        dc.addSeed("http://www.xinli001.com/ceshi");        //筛选URL的过滤条件        dc.addRegex("http://www.xinli001.com/ceshi/\\d{1,}");        //同时启动多少个线程进行抓取        dc.setThreads(5);        //断点续爬功能开启        dc.setResumable(true);        //启动爬虫,向下爬10层        dc.start(10);    }}

lib

这里写图片描述

0 0
原创粉丝点击