[jsoup] jsoup 抓取网页内容

抓取html中的数据有常用的几种方法,利用htmlparser、jsoup等。在这里用jsoup测试。官方网站:http://jsoup.org/

 

package com.xwolf.jsoup.text;

import java.net.URL;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Attributes;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;

public class GetText {
    
    /**
     * 解析本地html文档
     */
    public static void parseLocalText(){
        
        
        String html = "<head><title class='white'>登陆首页</title></head><body>"+
        "<a class='red' href='${pageContext.request.contextPath}/getImag.do?id=1&tit=testJsoup'>查看</a>"
        + "<p>第一段内容 <h1 id='smallTitle'>第一段小标题</h1> <div> <p id='smallTitle'>图片 <span>查看</span></p> <img  src='1.jpg'/></div></p></body>";
        
        
        Document document =Jsoup.parse(html);
        //获取head之间的内容
        Element headEle =document.head();
        List<Node> headNodes=headEle.childNodes();
        System.out.println("获取head部分的内容:"+headEle);
        
        for (Node head:headNodes){
            //获取节点的名称 
            String nodeName =head.nodeName();//title
            // 获取指定标签的属性
            Attributes  atts= head.attributes();
            System.out.println(atts.html());
        }
        //System.out.println(document.body());
        // 获取body标签之间的内容
        Element element = document.body();
        /**
         * 根据属性ID获取指定的Element,
         * 如果有多个ID,获取第一个id的标签
         */
        Element idEle =element.getElementById("smallTitle");
        System.out.println("根据ID获取到的内容:"+idEle);
        
        //获取属性为href的所有Element
        Elements eles = element.getElementsByAttribute("href");
        for (int i=0;i<eles.size();i++){
            Element childEle = eles.get(i);
            String href =childEle.attr("href");
            System.out.println(href);//获取属性为指定的URL
            
            //获取连接后的参数
            // ?是特殊字符,要转义否则抛出异常
            String param = href.split("\\?")[1];
            System.out.println(param);//id=1&tit=testJsoup
        }
        
    }
   // 解析远程 html
    public static void parseRemoteHtml() throws Exception{
        
        URL url = new URL("http://news.cnblogs.com/n/523086/");
        Document html = Jsoup.parse(url, 1000);
        Element head =html.head();
        //System.out.println(head);
        Element body = html.body();
        //System.out.println(body);
        // 获取所有包含href属性的标签
        Elements hrefEles =body.getElementsByAttribute("href");
        for (Element ele :hrefEles){
            //System.out.println(ele);
        }
        
        // 根据标签名称 获取
        Elements pEle = body.getElementsByTag("p");
        for (Element p :pEle){
            System.out.println(p);
        }
    }
    public static void main(String[] args) throws Exception{
        
         parseLocalText();
        
        //parseRemoteHtml();
    }
}

可以通过html文档字符串,html文件,URL等来解析。本地文件就不测试了。

遇到一个异常,在String 的split方法以前没有注意到。特殊字符要转义。

 

参考资料:

动态爬虫jsoup+jdic实现

HTML解析器软件

Dangling meta character '?' near index 0

posted @ 2015-06-14 07:59  snow__wolf  阅读(581)  评论(0)    收藏  举报