crawler4j使用初体验之酷房网房源爬取

来源:互联网 发布:网络规划设计师 编辑:程序博客网 时间:2024/04/30 20:04

前几天学习了一个开源的java爬虫框架crawler4j,在摸索了一段时间后写了一个爬虫demo,特此记录分享,框架的搭建和方法的意义什么的就不详细说明了,网上有很多相关的教程可以看一下;


根据官方demo还是将爬虫分为两个类
一个controller类
一个crawler类
controller类我简单的修改了爬虫种子

  controller.addSeed("http://jinan.koofang.com/sale/c1/pg1");

crawler类的修改
修改了筛选规则

    private final static Pattern FILTERS = Pattern.compile(".*(\\.(css|js|"              + "|tiff?|mid|mp2|mp3|mp4" + "|wav|avi|mov|mpeg|ram|m4v|pdf"              + "|rm|smil|wmv|swf|wma|zip|rar|gz))$");     /**     * You should implement this function to specify whether the given url     * should be crawled or not (based on your crawling logic).     */    @Override    public boolean shouldVisit(Page referringPage, WebURL url) {        String href = url.getURL().toLowerCase();        if(FILTERS.matcher(href).matches()){            return false;        }        if(href.contains("sale/c1/pg")){            return true;        }        return false;    }

修改了页面处理的方法

    public void visit(Page page) {        String url = page.getWebURL().getURL();        System.out.println(url);        if (page.getParseData() instanceof HtmlParseData) {            HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();            String text = htmlParseData.getText();            String html = htmlParseData.getHtml();            Set<WebURL> links = htmlParseData.getOutgoingUrls();            Document doc = Jsoup.parse(html);            Elements items = doc.getElementsByClass("miaoshu");            for (Element item : items) {                String name = item.select("#mh_area").text();                String size1 = item.select("div > div.xiangxi_left > p.map_house > span:nth-child(2)").text();                String size2 = item.select("div > div.xiangxi_left > p.map_house > span:nth-child(3)").text();                String address = item.select("div > div.xiangxi_left > p:nth-child(4)").text();                String cost = item.select("div > div.xiangxi_right > div.xiangxi_right_price_com > div.xiangxi_right_price.fl > span").text();                String per = item.select("div > div.xiangxi_right > div.xiangxi_right_danjia").text();                String link = item.select("#biaoti_a").attr("href");                System.out.println(name+" "+size1+" "+size2+" "+address+" "+cost+"万元    "+per+"    "+link);            }        }    }

其中元素的selector选取,可以使用浏览器的copy selector功能,比较方便准确;

最后的运行结果如下
这里写图片描述

1 0
原创粉丝点击