jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
jsoup的主要功能如下:
1. 从一个URL,文件或字符串中解析HTML;
2. 使用DOM或CSS选择器来查找、取出数据;
3. 可操作HTML元素、属性、文本;
jsoup是基于MIT协议发布的,可放心使用于商业项目。
解析XML和解析JSON大家都已经在程序中使用很多了,解析HTML也是一个意思,就是用法不同而已。
这里实用jsoup来解析我自己的博客,抓取博客首页的标题列表并打印,该程序为入门示例程序。
如图,如果访问www.javacui.com网站,查看源码,会看到如上内容。
分析一下,ID为left的DIV里面就是文章列表,列表以dl进行划分,其中标题位于dl-dt-h2-a标签内。根据以上分析,编写如下代码。
package com.cui.test;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* 获取www.javacui.com网站的文章列表
* @author java無名
*/
public class JavacuiSpider {
public static void main(String[] args) {
try {
Document doc = null;
doc = Jsoup.connect("http://www.javacui.com/").get(); // 直接发送HTTP请求获得
Element content = doc.getElementById("left"); // 根据ID获得文章列表DIV
Elements elements = content.getElementsByTag("dl"); // DIV中每个dl都是一篇文章
int i = 1; // 用于显示第几篇文章
for (Element e : elements) {
Elements as = e.getElementsByAttribute("target"); // 根据属性获取,一遍文章中有两个a,都有target属性,第一个是标题连接,第二个是点击详细
Element a = as.get(0); // 获取第一个,既标题连接
String title = a.text(); // 问的标签内的文本
System.out.println("第【" + i + "】篇文章标题:" + title);
i++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
程序会像爬虫一样读取博客源码,然后解析出文章标题并打印。
请用maven引用jsoup的jar包
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
结束。