HTML解析器Jsoup ,其“类似于jquery”和“ regex”选择器语法非常易于使用,并且足够灵活,可以获取您想要的任何东西。 以下是三个示例,向您展示如何使用Jsoup从HTML页面获取链接,图像,页面标题和“ div”元素内容。
下载jsoup
jsoup在Maven中央存储库中可用。 对于非Maven用户,只需从jsoup网站下载。
pom.xml
org.jsoup
jsoup
1.10.2
1.抢占所有超链接
本示例向您展示如何使用jsoup获取页面标题,并获取“ google.com”中的所有链接。
HTMLParserExample1.java
package com.mkyong;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class HTMLParserExample1 {
public static void main(String[] args) {
Document doc;
try {
// need http protocol
doc = Jsoup.connect("http://google.com").get();
// get page title
String title = doc.title();
System.out.println("title : " + title);
// get all links
Elements links = doc.select("a[href]");
for (Element link : links) {
// get the value from href attribute
System.out.println("\nlink : " + link.attr("href"));
System.out.println("text : " + link.text());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出量
title : Google link : http://www.google.com.my/imghp?hl=en&tab=wi text : Images link : http://maps.google.com.my/maps?hl=en&tab=wl text : Maps //omitted for readability
注意
建议在Jsoup中指定一个“userAgent
”,以避免HTTP 403错误消息。Document doc = Jsoup.connect("http://anyurl.com") .userAgent("Mozilla") .get();
2.抓取所有图像
第二个示例向您展示如何使用Jsoup regex选择器从“ yahoo.com”获取所有图像文件(png,jpg,gif)。
HTMLParserExample2.java
package com.mkyong;
package com.mkyong;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class HTMLParserExample2 {
public static void main(String[] args) {
Document doc;
try {
//get all images
doc = Jsoup.connect("http://yahoo.com").get();
Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
for (Element image : images) {
System.out.println("\nsrc : " + image.attr("src"));
System.out.println("height : " + image.attr("height"));
System.out.println("width : " + image.attr("width"));
System.out.println("alt : " + image.attr("alt"));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出量
src : http://l.yimg.com/a/i/mntl/ww/events/p.gif height : 50 width : 202 alt : Yahoo! src : http://l.yimg.com/a/i/ww/met/intl_flag_icons/20111011/my_flag.gif height : width : alt : //omitted for readability
3.获取元元素
最后一个示例模拟一个脱机HTML页面,并使用jsoup解析内容。 它获取“ meta ”关键字和描述,以及ID为“ color”的div元素。
HTMLParserExample3.java
package com.mkyong;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class HTMLParserExample3 {
public static void main(String[] args) {
StringBuffer html = new StringBuffer();
html.append("");
html.append("");
html.append("");
html.append("");
html.append("Hollywood Life ");
html.append("");
html.append("");
html.append("");
html.append("");
html.append("This is red />");
html.append("");
html.append("");
Document doc = Jsoup.parse(html.toString());
//get meta description content
String description = doc.select("meta[name=description]").get(0).attr("content");
System.out.println("Meta description : " + description);
//get meta keyword content
String keywords = doc.select("meta[name=keywords]").first().attr("content");
System.out.println("Meta keyword : " + keywords);
String color1 = doc.getElementById("color").text();
String color2 = doc.select("div#color").get(0).text();
System.out.println(color1);
System.out.println(color2);
}
}
输出量
Meta description : The latest entertainment news
Meta keyword : hollywood gossip, hollywood news
This is red
This is red
4.抢形式输入
此代码段向您展示了如何使用Jsoup来获取HTML表单输入(名称和值)。 有关详细用法,请参阅使用Java自动登录网站的信息 。
public void getFormParams(String html){
Document doc = Jsoup.parse(html);
//HTML form id
Element loginform = doc.getElementById("your_form_id");
Elements inputElements = loginform.getElementsByTag("input");
List paramList = new ArrayList();
for (Element inputElement : inputElements) {
String key = inputElement.attr("name");
String value = inputElement.attr("value");
}
}
5.获取收藏夹图标
此代码显示了如何使用Jsoup来显示页面的收藏夹图标。
jSoupExample.java
package com.mkyong;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class jSoupExample {
public static void main(String[] args) {
StringBuffer html = new StringBuffer();
html.append("");
html.append("");
html.append("");
//html.append("");
html.append("");
html.append("");
html.append("something");
html.append("");
html.append("");
Document doc = Jsoup.parse(html.toString());
String fav = "";
Element element = doc.head().select("link[href~=.*\\.(ico|png)]").first();
if(element==null){
element = doc.head().select("meta[itemprop=image]").first();
if(element!=null){
fav = element.attr("content");
}
}else{
fav = element.attr("href");
}
System.out.println(fav);
}
}
输出量
http://example.com/image.ico
参考文献
- http://jsoup.org/
- jsoup选择器示例
- jsoup获取页面元内容
标签: hello world html解析器 jsoup 解析器
翻译自: https://mkyong.com/java/jsoup-html-parser-hello-world-examples/