Java爬虫之 Jsoup 的使用

解析URL和文件

  • public void testUrl() throws Exception {
        // 解析URL地址,参数是url和超时时间
        Document doc = Jsoup.parse(new URL("http://www.baidu.com"), 1000);
        // 使用标签选择器获取title标签内容
        String title = doc.getElementsByTag("title").first().text();
        System.out.println(title);
    }
    
     public void testFile() throws Exception {
        // 解析文件
        Document doc = Jsoup.parse(new File("...test.html"), "utf8");
        String title = doc.getElementsByTag("title").first().text();
        System.out.println(title);
    }
    

使用 dom 方式遍历文档

  • getElementById
    public void testDOM() throws Exception {
        Document doc = Jsoup.parse(new URL("http://www.baidu.com"), 1000);
        Element element = doc.getElementById("back");
        System.out.println(element.text());
    }
    
  • getElementsByTag
    Element element = doc.getElementsByTag("a").first();
    System.out.println(element.text());
    
  • getElementsByClass
    Element element = doc.getElementsByClass("all a_js").first();
    System.out.println(element.text());
    
  • getElementsByAttribute
    Element element = doc.getElementsByAttribute("XXX").first();
    System.out.println(element.text());
    
  • getElementsByAttributeValue
    // 参数1是属性名,参数2是属性值
    Element element = doc.getElementsByAttributeValue("href", "http://www.baidu.com").first();
    System.out.println(element.text());
    

从元素中获取数据

首先获取元素

Element element = doc.getElementById("back");
  • 获取id
    System.out.println(element.id());
    
  • 获取className(s)
    classNames得到的是一个Set,表示该元素不止一个class
    System.out.println(element.className());
    
  • 获取属性的值attr
    System.out.println(element.attr("id"));
    
  • 获取所有属性attributes
    System.out.println(element.attributes());
    
  • 获取文本内容text
    System.out.println(element.text());
    

Selector 选择器组合使用

元素名直接写,id前写#,class前写.

  • 元素+id
    Element element = doc.select("li#back").first();
    System.out.println(element.text());
    
  • 元素+class
    Element element = doc.select("li.li_6").first();
    System.out.println(element.text());
    
  • 元素+属性名
    Element element = doc.select("li[class]").first();
    System.out.println(element.text());
    
  • 任意组合
    只限于同级
    
  • ancestor child:查找某个元素下级子元素,可跨代
    Elements element = doc.select("li a .s_name");
    
  • parent > child:查找父元素的直接子元素
    Elements element = doc.select(".fdnav>ul>li");
    
  • parent > *:查找某个父元素所有直接子元素
    Elements element = doc.select(".innr>*");
    

没有修不好的电脑
原文地址:https://www.cnblogs.com/duniqb/p/12702478.html