[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方法以前没有注意到。特殊字符要转义。

参考资料:

浙公网安备 33010602011771号