【Jsoup】抓取文章并定制

关于Jsoup

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

这里写图片描述

同类产品横向对比,从上图咋一看感觉 Jsoup 比名声大噪的 bs 还厉害的样子。
行吧先来试用一下看起来灰常全面的 Jsoup 。

String html = "<html><head><title>First parse</title></head><body><p>Parsed HTML into a doc.</p></body></html>";  
Document document = Jsoup.parse(html);
Element body = document.body();
System.out.println(body.toString());

这是官网上面的第一个 jsoup 程序,我们看一下输出:

<body>
 <p>Parsed HTML into a doc.</p>
</body>

最近公司有这样一个需求,就是要从新闻网站上抓取文章,并将其头部、尾部、评论、以及和文章不相关的元素弄掉。 比如左图:http://xw.qq.com/news/20170523062658/NEW2017052306265802
这里写图片描述这里写图片描述

目标是达到右图效果(包括下面的评论区,相关推荐文章和一些广告都得处理掉)
思路是这样的用 jsoup 将网页弄下来,然后在网页尾部追加 js 代码将处理目标隐藏掉,当然对于异步加载的目标,则需要延迟隐藏掉。
关键Jquery代码(这里需要注意,如果源网页上没有 jquery 的引用,我们需要手动引用)

<!--script begin-->
<script>
    function test() {
        $('#ay-quiz-btn').removeAttr('data-boss');
        $('#ay-quiz-btn').hide(); 
    } 
    $(function() { $('.header').hide();
        $('#ay-quiz-btn').removeAttr('data-boss');
        $('#ay-quiz-btn').hide();
        $('.ay-quiz').hide();
        $('.comments').hide();
        $('.related').hide();
        $('.today_hot').hide();
        $('.info-box').hide();
        $('.footnav').hide();
        $('.footer').hide();
        $('.share').hide();
        setInterval(function() { 
            test(); 
        }, 1000);
    })
</script>
<!--script begin-->

joup依赖:

<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.10.2</version>
</dependency>

看一下 java 实现代码:

    public static void main(String[] args) throws Throwable{
//      String html = "<html><head><title>First parse</title></head><body><p>Parsed HTML into a doc.</p></body></html>";  
//      Document document = Jsoup.parse(html);
//      Element body = document.body();
//      System.out.println(body.toString());
        //目标url
        String url = "http://xw.qq.com/news/20170523062658/NEW2017052306265802";
        //Jsoup.connect(url).get() 请求改地址获取到一个document对象
        Document doc = Jsoup.connect(url).get();
        //System.out.println(doc);
        //需要追加的 script 段 ,如果源网页中没有 jquery 引入 则需要手动引入 这一段 script 仅仅对于腾讯新闻网这个站点有用
        String script = "<!--script begin-->" +
        "<script>" +
            "function test(){" +
                "$('#ay-quiz-btn').removeAttr('data-boss');"+
                "$('#ay-quiz-btn').hide();"+
            "}"+
            "$(function(){"+
                "$('.header').hide();"+
                "$('#ay-quiz-btn').removeAttr('data-boss');"+
                "$('#ay-quiz-btn').hide();"+
                "$('.ay-quiz').hide();"+
                "$('.comments').hide();"+
                "$('.related').hide();"+
                "$('.today_hot').hide();"+
                "$('.info-box').hide();"+
                "$('.footnav').hide();"+
                "$('.footer').hide();"+
                "$('.share').hide();"+
                "setInterval(function () {"+
                   "test();"+
                "}, 1000);"+
            "})"+
        "</script>"+
        "<!--script begin-->";
        //在得到的 document 对象的尾部追加这段script 
        doc.append(script);
        //输出处理后的 html ,这里可以做文件输出处理,输出html 供外部访问
        System.out.println(doc);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值