有时候我们想爬取一些网站的数据 ,方便业务信息的采集等,Jsoup给我们提供了很多方便的方法,轻轻松松解析html代码片段,然后拿到自己想要的数据。
Jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
下面是关于Jsoup提供的功能方法目录参考链接:
可以看出Jsoup的主要功能:
(1)从一个URL,文件或字符串中解析HTML
(2)使用DOM或CSS选择器来查找、取出数据
(3)可操作HTML元素、属性、文本
使用方法:
一:下载Jsoup依赖的三方jar包,下载地址,将下载好的jar包放入WEB-INF——>lib目录下
二:爬取网页的源码:
当我们不知道jsoup时,我们想获取百度首页的body内容,我们可能会这样写:
public static void catchHtmlCode(String getUrl){
BufferedReader buffreader;
try {
URL u = new URL(getUrl);
URLConnection connection = u.openConnection();
InputStream inputStream = connection.getInputStream();
buffreader = new BufferedReader(new InputStreamReader(inputStream, "utf-8"));
StringBuffer buff = new StringBuffer();
String line;
while (null != (line = buffreader.readLine())) {
buff.append(line);
}
String html = buff.toString();
/*解析html字符串*/
Document doc = Jsoup.parse(html);
Element body = doc.body();
System.out.println("code:"+body.html());
}catch (Exception e) {
e.printStackTrace();
}
}
这样看起来很麻烦,用jsoup一行代码便能达到异曲同工的效果:
public static void catchHtmlCode(String getUrl){
try {
Document doc = Jsoup.connect(getUrl).get();
Element body = doc.body();
System.out.println("code:"+body.html());
}catch (Exception e) {
e.printStackTrace();
}
}
三:查看爬取的结果:
public static void main(String[] args) {
catchHtmlCode("http://www.baidu.com");
}
可以看到爬取的结果和百度首页的源码一致。
Document查找元素常用的方法:
body()
:能够获取文档body元素的所有子元素,与 getElementsByTag("body")
相同
getElementById()
:通过id来获取元素,和javascript写法相同
getElementsByClass()
:通过class类名来获取元素
getElementsByTag()
:通过标签名称来获取元素
Document获取元素数据常用的方法:
text()
:获取标签的文本内容,和jquery用法相似
html()
:获取标签的HTML内容,包含标签
title()
:获取html<title>标签的内容
Document操作元素常用的方法
append()
:在调用元素的最后面添加html片段
appendText()
:在调用元素的最后面添加文本内容
prepend()
:在调用元素的最前面添加html片段
prependText()
:在调用元素的最前面添加文本内容
更多用法参考Jsoup官网API
原文作者技术博客:https://www.jianshu.com/u/ac4daaeecdfe
95后前端妹子一枚,爱阅读,爱交友,将工作中遇到的问题记录在这里,希望给每一个看到的你能带来一点帮助。
欢迎留言交流。