网络爬虫入门(二)-Jsoup解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33248299/article/details/82985525

一.Jsoup介绍

  • 一般来说我们对爬取的网页解析有两种方法
  • 一种方法就是正则
  • 另一种方法就是Jsoup解析

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

所需要的jar包.

在这里插入图片描述

二.Jsoup输入

  • 从URL加载文档
  • 使用Jsoup.connect()方法从URL加载HTML
//解析url地址,第一个参数是需要解析的url,第二个参数是连接的超时时间,单位是毫秒
        Document document = Jsoup.parse(new URL("https://www.baidu.com"),10000);
        //获取页面信息,输出为html文件
        //FileUtils.writeStringToFile(new File("D:\\test.html"),document.html(),"UTF-8");

        String title = document.getElementsByTag("title").first().text();

        System.out.println(title);
 Document document = Jsoup.connect("https://blog.csdn.net/qq_33248299/article/details/82890539").get();
        System.out.println(document.title());
  • 从文件加载文档
  Document document = Jsoup.parse(new File("D:\\test.html"),"UTF-8");
        System.out.println(document.title());
  • 把文件转字符串加载文档
 String html = FileUtils.readFileToString(new File("D:\\test.html"),"UTF-8");
        Document document = Jsoup.parse(html);
        System.out.println(document.title());
  • 从字符串加载文档
    String html = "<html><head><title>First parse</title></head><body><p>Parsed HTML into a doc.</p></body></html>";
        Document document = Jsoup.parse(html);
        System.out.println(document.title());

虽然使用Jsoup可以替代HttpClient直接发起请求解析数据,但是往往不会这样用,因为实际开发过程中,需要使用到多线程,连接池,代理等等技术,而jsoup对这些技术支持并不是很好,所以jsoup一般仅仅作为html解析工具使用

三.数据抽取

Document类的重要方法可参见.

  • 将HTML解析成一个Document之后,就可以使用类似于DOM的方法进行操作
  • Elements这个对象提供了一系列类似于DOM的方法来查找元素,抽取并处理其中的数据

1.从元素抽取属性,文本和HTML

 String html = FileUtils.readFileToString(new File("D:\\test.html"),"UTF-8");
        Document document = Jsoup.parse(html);
        Elements links = document.select("a");
        Element li = links.first();//抽取第一个元素
        for(Element link:links){
            System.out.println(link.attr("href"));//取得超链接中href对应的值
            System.out.println(link.text());//取得超链接中的文本
        }

2.使用选择器语法来查找元素

       Elements links = document.select("a[href]");//带有href属性的a元素
        Elements pngs = document.select("img[src$=.png]");//扩展名为.png的图片
        Element masthead = document.select("div.masthead").first();//class等于masthead的div标签

3.遍历文档

    根据id查询元素getElementById
    根据标签获取元素getElementsByTag
    根据class获取元素getElementsByClass
    根据属性获取元素getElementsByAttribute

Element类的重要方法可参见.

四.实例

  • 我们来获取淘宝首页的主题市场这一排的标题以及其他的超链接

在这里插入图片描述

Document doc = Jsoup.connect("https://www.taobao.com").get();
        Elements links = doc.select("div[class=tbh-nav J_Module tb-pass  tb-bg ]");
        for(Element link:links){
            
           // System.out.println(link.text()); 其实这里可以直接打印 包含了这个div下所有的text
            Elements as = link.select("a");
            for(Element a:as){
                System.out.println(a.attr("href"));
            }
            Elements lis = link.select("li");
            for(Element li:lis){
                System.out.println(li.text());
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_33248299/article/details/82985525
今日推荐