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

本文分享了使用crawler4j框架构建的一个爬虫demo实践,包括controller类与crawler类的具体实现,通过修改筛选规则和页面处理方法来抓取特定信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值