Jsoup组件抓取HTML标签

本文介绍了如何使用Java的Jsoup库来抓取和解析HTML页面,包括解析HTML字符串、根据URL获取HTML、获取图片和链接等,同时讲解了Jsoup的选择器语法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jsoup如何获取解析html元素内容?

微信朋友圈分享链接通常需要抓取html标签获取当前html页面的内容和第一张图片,如何抓取html元素呢,Java中通常用Jsoup组件去抓取元素,Jsoup 是一款Java的HTML解析包,主要用于对html进行解析,有时候我们需要从网页源码中提取有效的信息内容,比如网页的title,网页的body,使用jsoup对html网页进行解析,可以非常轻松的实现此类需求。

Jsoup可以解析一个html字符串,可以解析一个url,也可以解析一个html文本:

 

1:解析一个字符串

	public static void parseHtmlText(){
		String html = "<!DOCTYPE html><html><head><meta "
				+ "charset=\"utf-8\"><title>demo</title>"
				+ "</head><body><h1>你好,吃饭了吗</h1></body></html>";
		Document document = Jsoup.parse(html);
		System.out.println("title:" + document.title());
	}

说明:

parse(String html, String baseUri) 这方法能够将输入的HTML解析为一个新的文档 (Document),参数 baseUri 是用来将相对 URL 转成绝对URL,并指定从哪个网站获取文档。如这个方法不适用,你可以使用 parse(String html) 方法来解析成HTML字符串如上面的示例。.

只要解析的不是空字符串,就能返回一个结构合理的文档,其中包含(至少) 一个head和一个body元素。 

一旦拥有了一个Document,你就可以使用Document中适当的方法或它父类 ElementNode中的方法来取得相关数据。

2:解析一个body片段

public static void parseHtmlBody(){
		
		String html = "<h1>Lorem ipsum</h1>";
		Document doc = Jsoup.parseBodyFragment(html);
		Element body = doc.body();
		System.out.print("body:" + body.html());
		
	}

3:解析一个html文本

public static void parseHtmlFile(){
		try {
			//根据当前class绝对路径得到当前的文件流
			String file = JsoupMain.class.getResource("").getPath() + "index.html";
			System.out.println("file:" + file);
			Document document = Jsoup.parse(new File(file), "UTF-8","");
			System.out.println("title:" + document.title());
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

4:根据url解析html

	public static void  parseHtmlUrl(){
		String url = "http://www.baidu.com/";
		try {
			Document document = Jsoup.connect(url).get();
			String title = document.title();
			System.out.println(title);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

    注意:根据url解析html.并且获取标题(注意此写法在Android中应该将这个方法放在子线程中),
     connect(String url) 方法创建一个新的 Connection, 和 get() 
     取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。

5:获取html文档中的img标签

public static void  parseHtmlImgElement(){
		String url = "https://www.qq.com/";
		try {
			Document document = Jsoup.connect(url).get();
			//获取html body元素
			Element element = document.body();
			Elements elements = element.getElementsByTag("img");
			for(Element e : elements){
				System.out.print("网页中图片地址:" + "http:" + e.attr("src"));
				System.out.print(";宽:" + e.attr("width"));
				System.out.println(";高:" + e.attr("height"));
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

注意:e.attr("src")返回的字符串不是一个全路径,是//www.baidu.com/img/gs.gif

打印结果如下:

网页中图片地址:http://mat1.gtimg.com/pingjs/ext2020/qqindex2018/dist/img/qq_logo_2x.png;宽:100%;高:
网页中图片地址:http://mat1.gtimg.com/pingjs/ext2020/test2017/netwatch.png;宽:;高:
网页中图片地址:http://img1.gtimg.com/ninja/2/2018/10/ninja153907290259802.png;宽:;高:
网页中图片地址:http://img1.gtimg.com/ninja/2/2018/10/ninja153907291410277.png;宽:;高:
网页中图片地址:http://inews.gtimg.com/newsapp_ls/0/7969043087_640330/0;宽:;高:
网页中图片地址:http://img1.gtimg.com/ninja/2/2019/03/ninja155169290388291.jpg;宽:;高:
网页中图片地址:http://inews.gtimg.com/newsapp_ls/0/7967777098_150120/0;宽:;高:
网页中图片地址:http://img1.gtimg.com/bj/pics/hv1/64/147/2305/149920174.jpg;宽:;高:
网页中图片地址:http://mat1.gtimg.com/news/zt2018/qqpclmlogo/logo_ssy.png;宽:;高:
网页中图片地址:http://img1.gtimg.com/ninja/2/2019/03/ninja155165943065253.jpg;宽:;高:
网页中图片地址:http://inews.gtimg.com/newsapp_ls/0/7967571215_640330/0;宽:;高:

6:获取html文档中的<a>标签,并且将其链接打印出来

public static void  parseHtmlLinkElement(){
		String url = "https://www.baidu.com/";
		try {
			Document document = Jsoup.connect(url).get();
			//获取html body元素
			Element element = document.body();
			Elements elements = element.getElementsByTag("a");
			for(Element e : elements){
				String linkHref = e.attr("href");
				String linkText = e.text();
				System.out.println("linkHref:" + linkHref);
				System.out.println("linkText:" + linkText);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

7:选择器语法查找元素以及属性

public static void  selectHtmlLinkElement(){
		String url = "https://www.baidu.com/";
		try {
			Document document = Jsoup.connect(url).get();
			//获取标签a带有href属性的元素
			Elements links = document.select("a[href]");
			//找到img标签中以png结尾的标签
			Elements pngs = document.select("img[src$=.png]");
			//获取class等于s-top-wrap的div标签,获取他的第一个元素
			Element divElement = document.select("s-isindex-wrap").first();
			if(divElement != null){
				System.out.println(divElement.data());
			}
			
			for(Element e : links){
				System.out.println(e.attr("href"));
			}
			
			System.out.println("**************selectHtmlLinkElement***************");
			
			for(Element e : pngs){
				System.out.println("http:" + e.attr("src"));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

Selector选择器的使用:
tagname: 通过标签查找元素,比如:a
ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 <fb:name> 元素
#id: 通过ID查找元素,比如:#logo
.class: 通过class名称查找元素,比如:.masthead
[attribute]: 利用属性查找元素,比如:[href]
[^attr]: 利用属性名前缀来查找元素,比如:可以用[^data-] 来查找带有HTML5 Dataset属性的元素
[attr=value]: 利用属性值来查找元素,比如:[width=500]
[attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]
[attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i)\.(png|jpe?g)]

参考链接:https://www.open-open.com/jsoup/parse-document-from-string.htm

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值