您的位置:首页 > Web前端 > JavaScript

【爬虫系列】第二部分 网页解析Jsoup

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

     在爬虫采集网页领域主要作用是用HttpClient获取到网页后,使用Jsoup提取网页中需要的信息,Jsoup支持类似Jquery、CSS选择器,来获取需要的数据,使用非常方便。

     下面结合代码简单展示如何使用Jsoup获取需要的页面数据。

一、Jsoup 入门demo

[java] view
plain copy

public class JsoupHello {  

  

    public static void main(String[] args) throws Exception{  

        CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例  

        HttpGet httpget = new HttpGet("http://www.cnblogs.com/"); // 创建httpget实例  

           

        CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求  

        HttpEntity entity=response.getEntity(); // 获取返回实体  

        String content=EntityUtils.toString(entity, "utf-8");  

        response.close(); // 关闭流和释放系统资源  

          

        Document doc=Jsoup.parse(content); // 解析网页 得到文档对象  

        Elements elements=doc.getElementsByTag("title"); // 获取tag是title的所有DOM元素  

        Element element=elements.get(0); // 获取第1个元素  

        String title=element.text(); // 返回元素的文本  

        System.out.println("网页标题是:"+title);  

          

        Element element2=doc.getElementById("site_nav_top"); // 获取id=site_nav_top的DOM元素  

        String navTop=element2.text(); // 返回元素的文本  

        System.out.println("口号:"+navTop);  

           

    }  

}  

1、使用httpClient 获取网页

2、使用jsoup parse解析网页,并根据丰富的getElement方法按照不同的属性获取元素值

二、常用查找dom元素方法

1、根据标签名(tagName)查找dom  

[java] view
plain copy

Elements elements=  doc.getElementsByTag("title"); //获取tag是title的所有dom元素          

Element element= elements.get(0); //获取第一个  

System.out.println(element.text());//输出元素txt值  

2、根据元素Id查找

[java] view
plain copy

Element elementById=doc.getElementById("footer");  

System.out.println(elementById.text());  

3、根据class 名查找

[java] view
plain copy

Elements elementsByClass=doc.getElementsByClass("post_item");  

for(Element e:elementsByClass)  

{  

    System.out.println(e.html());  

}  

4、根据attribute属性名查找

[java] view
plain copy

//根据属性名(如:id,width) 查询dom  

Elements elementsByAttr=doc.getElementsByAttribute("width");  

for(Element e2:elementsByAttr)  

{  

    System.out.println(e2.toString());  

}  

5、根据attribute和attributeValue共同查找

[java] view
plain copy

//根据属性名&值共同查找dom  

Elements elementsByAttrValue=doc.getElementsByAttributeValue("width", "142");  

System.out.println(elementsByAttrValue.toString());  

三、使用Jsoup选择器查找dom元素

1、class类选择器使用

[java] view
plain copy

      //class 使用.   中间空格  

Elements eleLinks= doc.select(".post_item .post_item_body h3 a");     

for(Element el:eleLinks)  

 {  

 System.out.println(el.text());  

 }  

2、带有href超链接的a标签查找

[java] view
plain copy

//css语法 带有href 属性的a元素   

Elements elea= doc.select("a[href]");  

for(Element ea:eleLinks)  

 {  

 System.out.println(ea.toString());  

 }  

3、查找图片标签

[java] view
plain copy

//img图片  

Elements imgs= doc.select("img[src$=.png]");//查找img标签,后缀为png的所有图片dom  

for(Element ea:imgs)  

 {  

 System.out.println(ea.toString());  

 }  

4、根据dom Id查找元素

[java] view
plain copy

//根据dom id获取元素 ,text返回a的中文文本信息,html返回a标签链接信息  

       Element eleId=doc.select("#friend_link").first();  

       System.out.println("##############纯文本"+eleId.text());  

       System.out.println("##############纯文本"+eleId.html());  

5、获取dom元素中指定属性值

[java] view
plain copy

Elements eleLinks= doc.select(".post_item .post_item_body h3 a");     

   for(Element el:eleLinks)  

    {  

       System.out.println("***********************标题是"+el.text()); //获取所有文本  

       System.out.println("***********************连接是"+el.attr("href")); //获取所有博客链接 dom a 里的属性值  

    }  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: