首页 » 技术分享 » crawler4j使用初体验之酷房网房源爬取

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

 

前几天学习了一个开源的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功能,比较方便准确;

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

转载自原文链接, 如需删除请联系管理员。

原文链接:crawler4j使用初体验之酷房网房源爬取,转载请注明来源!

0