Jsoup可以解析网络和本地HTML,常用一般为通过网址解析网页,解析网页可以通过get和post方法获取网页内容。
解析本地HTML:
String html = "<html><head><title>First parse</title></head><body><p>Parsed HTML into a doc.</p></body></html>";
Document document = Jsoup.parse(html);
当然,即便你提供的HTML格式不完整,对Jsoup而言,并不是什么问题。
获取网页HTML:
- 使用get方法
try {
Document document = Jsoup.connect("http://www.jianshu.com/").get();
} catch (IOException e) {
e.printStackTrace();
}
- 使用post方法
try {
//使用post方法请求网页时,其data()方法支持Map传参,同时也可以添加userAgent(用户认证)以及cookie
Document document = Jsoup.connect("http://www.jianshu.com/")
.data("key", "value")
.timeout(5000)
.post();
} catch (IOException e) {
e.printStackTrace();
}
注意:以上两个方法都需要在异步线程中进行。
Jsoup中一些方法的应用:
- 常用方法select()
通过此方法可以查询用id或者class标志的HTML标签,如果是id,select方法中的参数传#id(例:select(#content)),如果是class,则为 标签名.class名(例:select(div.content))
- getElementById()
获取HTML文档中指定id的Element,HTML文档中Id的定义是唯一的,因此通过此方法获取的是一个唯一的元素。
Element element = getElementById("content");
- getElementsByTag()
获取HTML文档中指定标签名的所有元素,得到的以一个Elements集合。
Elements elements = getElementsByTag("div");
- getElementsByClass()
获取HTML文档中指定class名的所有元素
Elements elements = getElementsByClass("content");
- getElementsByAttribute()/attr()
获去指定属性名的所以Element,例如获取HTML文档下的所有图片链接
List<String> imageUrls = new ArrayList<>();
Elements elements = document.getElementsByAttribute("data-src");
for (Element element : elements) {
String imageUrl = element.select("img").first().attr("data-src");
imageUrls.add(imageUrl);
}
- first()
很多时候我们通过getElemetnts...()方法获取的为一个Element集合,这时候我们就可以通过first()方法获取其第一个Element。
Element element = document.select("div.content").first();
- text()
如果我们需要获取具体标签下的文本内容就可以使用text()方法,例如我们需要获取div标签class名为content下的h1标签中的内容
String text = document.select("div.content").first().getElementsByTag("h1").first().text();
其它更多用法详见Jsoup官网:https://jsoup.org/
网友评论