利用jsoup解析html

Ilona ·
更新时间:2024-11-15
· 545 次阅读

  1、jsoup简介   jsoup 是一款 Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。jsoup 的主要功能如下:   (1)从一个 URL,文件或字符串中解析HTML;   (2)使用DOM或CSS选择器来查找、取出数据;   (3)可操作HTML元素、属性、文本;   2、maven配置   <!-- jsoup -->   <dependency>   <groupId>org.jsoup</groupId>   <artifactId>jsoup</artifactId>   <version>1.7.3</version>   </dependency>   3、解析一个HTML文档   3.1 从字符串解析   String html = "<html><head><title>First parse</title></head>" + "<body><p>Parsed HTML into a doc.</p></body></html>";   <!-- 解析之后可以用Document的方法,拿出html中需要的数据 -->   Document doc = Jsoup.parse(html);    3.2 从URL获取解析   Document doc = Jsoup.connect("http://example.com/").get();   String title = doc.title();   (1)说明   connect(String url)方法创建一个新的 Connection, 和get()取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。Connection 接口还提供一个方法链来解决特殊请求,具体如下:   Document doc = Jsoup.connect("http://www.oschina.net/")   .data("query", "Java")   // 请求参数   .userAgent("I ’ m jsoup") // 设置 User-Agent   .cookie("auth", "token") // 设置 cookie   .timeout(3000)           // 设置连接超时时间   .post();                 // 使用 POST 方法访问 URL   这个方法只支持Web URLs (http和https 协议); 假如你需要从一个文件加载,可以使用parse(File in, String charsetName) 代替。   3.3 从文件解析   File input = new File("/tmp/input.html");   Document doc = Jsoup.parse(input, "UTF-8", "http://www.oschina.net/");   (1)说明   parse的第三个参数,需要在这里指定一个网址(虽然可以不指定),因为HTML文档中会有很多例如链接、图片以及所引用的外部脚本、css 文件等,而第三个名为 baseURL 的参数的意思是当 HTML 文档使用相对路径方式引用外部文件时,jsoup 会自动为这些 URL 加上一个前缀,也是这个 baseURL。   例如 :<a href=/project> 开源软件 </a> 会被转换成 <a href=http://www.oschina.net/project> 开源软件 </a>。   4、遍历一个HTML文档   4.1 Document方式遍历元素   4.1.1 搜索元素方法   getElementById(String id)   getElementByTag(String tag)   getElementByClass(String className)   getElementByAttribute(String key)   siblingElements(), firstElementSibling(), lastElementSibling(), nextElementSibling(), previousElementSibling()   parent(), children(), child(int index)   4.1.2 获取元素数据   attr(String key) – 获取key属性   attributes() – 获取属性   id(), className(), classNames()   text() – 获取文本内容   html() – 获取元素内部HTML内容   outerHtml() – 获取包括此元素的HTML内容   data() – 获取<srcipt>或<style>标签中的内容   tag(), tagName()   4.2 选择器语法遍历元素(jsoup与其他解析器的区别是可以使用类似jquery的选择器语法来搜索及过滤出所需的元素)4.2.1 基本选择器   tagname: 搜索tag标签的元素   ns|tag: 搜索命名空间内tag标签的元素,如fb|name:<fb:name>   id: 搜索有指定id的元素   .class: 搜索有指定class的元素   [attribute]: 搜索有attrribute属性的元素   [^attri]: 搜索有以attri开头的属性的元素   [attr=value]: 搜索有指定属性及其属性值的元素   [attr^=value], [attr$=value], [attr*=value]: 搜索有指定attr属性,且其属性值是以value开头、结尾或包括value的元素,如[href*=/path/]   [attr~=regex]: 搜索有指定attr属性,且其属性值符合regex正则表达式的元素   *: 搜索所有元素   4.2.2 选择器组合   el#id: 同时指定标签名称和id   el.class: 同时指定标签名称和class   el[attr]: 同时指定标签名称和及其中所含属性的名称   上述3项的任意组合,如a[href].highlight   ancestor child: 包含,如div.content p,即搜索<div class=”content”>下含有<p>标签的元素   ancestor > child: 直接包含,如div.content > p,即搜索直属<div class="content">节点下的<p>标签元素;div.content > *,即搜索<div class="content">下的所有元素   siblingA + siblingB: 直接遍历,如div.head + div,即搜索<div class="head"><div>的元素,其中不再包含子元素   siblingA ~ siblingX: 遍历,如h1 ~ p,即<h1>下直接或间接有<p>的元素   el, el, el: 组合多个选择器,搜索满足其中一个选择器的元素   5、使用范例   /*   previousSibling()获取某标签前面的代码   nextSibling()获取某标签后的代码   如:   <form id=form1>   第一名:Lily  <br/>   第二名:Tom   <br/>   第三名:Peter <br/>   </form>   */   Elements items = doc.select("form[id=form1]");   Elements prevs = items.select("br");   for(Element p : prevs){   String prevStr = p.previousSibling().toString().trim());   }   /*   常用的链接抓取   */   String itemTag = "div[class=mydiv]";   String linkTag = "a"   Elements items = doc.select(itemTag);   Elements links = items.select(linkTag);   for(Element l : links){   String href = l.attr("abs:href");//完整Href   String absHref = l.attr("href");//相对路径   String text = l.text();   String title = l.attr("title");   }



jsoup解析html jsoup HTML

需要 登录 后方可回复, 如果你还没有账号请 注册新账号