随机代码

1import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;
2import cn.edu.hfut.dmic.webcollector.model.Page;
3import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;
4
5
6public class AutoNewsCrawler extends BreadthCrawler {
7
8    public AutoNewsCrawler(String crawlPath, boolean autoParse) {
9        super(crawlPath, autoParse);
10
11        this.addSeed("http://news.hfut.edu.cn/list-1-1.html");//种子页面,起始页面
12
13        //正则规则设置 寻找符合http://news.hfut.edu.cn/show-xxxxxxhtml的url
14        this.addRegex("http://news.hfut.edu.cn/show-.*html");
15
16        this.addRegex("-.*\\.(jpg|png|gif).*");
17
18        //不要爬取包含 #的URL
19        this.addRegex("-.*#.*");
20
21        setThreads(50);//线程数
22
23        getConf().setTopN(100);//设置每次迭代中爬取数量的上限
24
25            //设置是否为断点爬取,如果设置为false,任务启动前会清空历史数据。
26            //如果设置为true,会在已有crawlPath(构造函数的第一个参数)的基础上继
27            //续爬取。对于耗时较长的任务,很可能需要中途中断爬虫,也有可能遇到
28            //死机、断电等异常情况,使用断点爬取模式,可以保证爬虫不受这些因素
29            //的影响,爬虫可以在人为中断、死机、断电等情况出现后,继续以前的任务
30            //进行爬取。断点爬取默认为false*/
31//        setResumable(true);
32    }
33
34    /*
35        visit函数定制访问每个页面时所需进行的操作
36    */
37    @Override
38    public void visit(Page page, CrawlDatums next) {
39        String url = page.url();
40
41        //如果页面地址如何我们要求
42        if (page.matchUrl("http://news.hfut.edu.cn/show-.*html")) {
43
44            String title = page.select("div[id=Article]>h2").first().text();//获取url标题
45
46            String content = page.selectText("div#artibody");
47
48            System.out.println("URL:\n" + url);//地址
49
50            System.out.println("title:\n" + title);//标题
51
52            System.out.println("content:\n" + content);//内容
53
54                        /*如果你想添加新的爬取任务,可以向next中添加爬取任务,
55               这就是上文中提到的手动解析*/
56            /*WebCollector会自动去掉重复的任务(通过任务的key,默认是URL),
57              因此在编写爬虫时不需要考虑去重问题,加入重复的URL不会导致重复爬取*/
58            /*如果autoParse是true(构造函数的第二个参数),爬虫会自动抽取网页中符合正则规则的URL,
59              作为后续任务,当然,爬虫会去掉重复的URL,不会爬取历史中爬取过的URL。
60              autoParse为true即开启自动解析机制*/
61            //next.add("http://xxxxxx.com");
62        }
63    }
64
65    public static void main(String[] args) throws Exception {
66
67        AutoNewsCrawler crawler = new AutoNewsCrawler("crawl", true);
68
69        crawler.start(4);//启动爬虫
70    }
71
72}
参考地址:java之网络爬虫介绍(非原创)

代码交流 2021