jsoup初探

jsoup是一个用于操作html的java第三方库,它提供非常方便的api,使用类似Dom,Css,Jquery的方法,用于抽取和操作数据。jsoup实现WHATWG HTML5规范,并像现代浏览器一样解析HTML DOM。以下是jsoup的一些特点:

  • 从url,file或者string中爬取和解析Html
  • 使用dom遍历和css选择器,抓取数据
  • 操作html的元素,属性和文本
  • 使用安全的白名单清理用户提交的内容,以防止xss(跨站脚本攻击)
  • 输出干净整洁的html

下面首先在idea中使用maven创建java项目,然后添加项目依赖的jar包,
打开项目设置,点击Libraries->右侧加号->From Maven,

示例代码:

try {
            Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
            Elements newsHeadlines = doc.select("#mp-itn b a");
            System.out.println(newsHeadlines.get(0).html());
            Element element = doc.getElementById("articlecount"); //类似javascript的方法
            System.out.println(element.html());

            String unsafe = "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
            Whitelist wl = Whitelist.basic();
            String safe = Jsoup.clean(unsafe, wl);
            // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>
            System.out.println(safe);
            wl.addAttributes("a", "href", "onclick");
            String safe1 = Jsoup.clean(unsafe, wl);
            System.out.println(safe1);

            String url = "http://www.news.cn/politics/";
            Document document = Jsoup.parse(new URL(url), 20000);
            Elements elements = document.select("a[href^=http://news.xinhuanet.com/politics]");//选择href值以此开始的所有a标签
            for (int i = 0; i < elements.size(); i ++)
            {
                String usafe = elements.get(i).outerHtml();
                String safestr = Jsoup.clean(usafe, Whitelist.basic());//过滤标签里嵌有img标签的项
                int index = (safestr.indexOf("</a>"));
                if(!">".equals(safestr.subSequence(index-1, index)))
                {
                    System.out.println(Jsoup.clean(safestr, Whitelist.basic()));
                }
            }
        }catch (Exception ex)
        {
            ex.printStackTrace();
        }

输出结果如下:

由于jsoup 良好的可扩展性API 设计,你可以通过选择器的定义来开发出非常强大的HTML 解析功能。再加上jsoup 项目本身的开发也非常活跃,因此如果你正在使用Java ,需要对HTML 进行处理,不妨试试。

你可能感兴趣的:(JSoup,html解析器,scrape)