Jsoup解析HTML获取数据的简单实例

来源:互联网 发布:php网络验证源码post 编辑:程序博客网 时间:2024/06/05 03:41

jsoup 中文参考文献    http://www.open-open.com/jsoup/

本文将利用jsoup,简单实现网络抓取的功能,该实例效果为:获取http://blog.csdn.net/zhangvalue的所有文章的标题以及打印出来简单摘要。


具体实现代码如下:

import org.jsoup.Connection;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.io.IOException;public class Warms {    public static void main(String[] args)throws IOException {        String url2 = "http://blog.csdn.net/zhangvalue";        Connection conn = Jsoup.connect(url2); // 建立与url中页面的连接        Document doc = conn.get(); // 解析页面        Elements links = doc.select("a[href]"); // 获取页面中所有的超链接        int i = 1;        for (Element link : links) {            if ("评论".equals(link.text())) { // 获取页面中每篇文章‘评论’的链接,进入文章                Document doc2 = Jsoup.connect(link.attr("abs:href")).get(); // 解析每篇文章的页面                System.out.println("第" + i + "篇:" + doc2.title()); // 把该文章的标题打印出来                i++;            }        }       int j=1;        Elements divs = doc.select(".article_description"); // 获取页面中article_description类的div        for (Element div : divs) {            System.out.println("第" + j + "篇:" + div.text()); // 把该文章的摘要打印出来            j++;            }        }    }
最终效果:

注意事项:需要的jar包最好是配置maven最方便

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


例子二:爬取如下小说网站右边列表

通过查看元素发现了想要爬取的结构如下:

代码如下:

import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;/** * Created by zhangvalue on 2017/7/17. */public class BookWorms {public static void main(String[] args) {    try {        Document html = Jsoup.connect("http://www.qu.la/xuanhuanxiaoshuo/")                //timeout里面的值我写的大,                .timeout(100000).get();        // 所有注释对应着网页查看(检查元素)        // 首先拿到类名为r的div里的所有数据        Elements div_content = html.select(".r");        // 然后拿到div中所有的li标签,就是相对应的所有玄幻小说的列表        Elements lis = div_content.select("li");        int book_count =lis.size();        System.out.println("book_count的个数--------"+book_count);        int i = 1;        for (Element element : lis) {            Element ele  = element.getElementsByAttributeValue("class","s5").first();            //寻找属性为指定值的元素。不区分大小写。(下面的S1为s1也一样)            Element ele2  = element.getElementsByAttributeValue("class","s1").first();            String sort = ele2.text();            String author = ele.text();            //或者使用selectElement link = element.select("a").first();            Element link = element.getElementsByTag("a").first();            String absHref = link.attr("abs:href"); //使用 abs: 属性前缀来取得包含base URI的绝对路径           //String href = link.attr("href");            String name = link.text();            System.out.println("第"+i+"本小说:"+ "类型:"+sort+"  "+ name+"  "+"author:"+author+"    "+"点击链接"+" "+absHref);            System.out.println("-----------------------------------------------------------------------------------------------------");            i++;        }    } catch (Exception e) {        // TODO Auto-generated catch block        e.printStackTrace();    }}}

实现效果如下: