Jsoup解析html(1)

System.out.println(e.attr(“href”));

}

}

三、Jsoup查找DOM元素


Jsoup提供了丰富的API来给我们查找我们需要的DOM元素,常用的如下:

getElementById(Stringid) 根据 id 来查询 DOM

getElementsByTag(StringtagName) 根据 tag 名称来查询 DOM

getElementsByClass(StringclassName) 根据样式名称来查询 DOM

getElementsByAttribute(Stringkey) 根据属性名来查询 DOM

getElementsByAttributeValue(Stringkey,Stringvalue) 根据属性名和属性值来查询 DOM

/**

  • Jsoup 查找 DOM 元素

*/

@Test

public void test2() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements itemElements = doc.getElementsByClass(“post_item”); // 根据样式名称来查询DOM

System.out.println(“=输出post_item========”);

for (Element e : itemElements) {

System.out.println(e.html());//获取里面所有的 html 包括文本

System.out.println(“\n”);

}

Elements widthElements = doc.getElementsByAttribute(“width”); // 根据属性名称来查询DOM(id class type 等),用的少一般很难找用这种方法

System.out.println(“=输出with的DOM========”);

for (Element e : widthElements) {

System.out.println(e.toString());//不能用 e.html() 这里需要输出 DOM

}

//

Elements targetElements = doc.getElementsByAttributeValue(“target”, “_blank”);

System.out.println(“=输出target-_blank的DOM========”);

for (Element e : targetElements) {

System.out.println(e.toString());

}

}

四、Jsoup使用选择器语法查找DOM元素


我们前面通过标签名,Id,Class样式等来搜索DOM,这些是不能满足实际开发需求的,很多时候我们需要寻找有规律的DOM集合,很多个有规律的标签层次,这时候,选择器就用上了。css jquery 都有,Jsoup支持css,jquery类似的选择器语法。

/**

  • 有层级关系

*/

@Test

public void test3() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements linkElements = doc.select(“#post_list .post_item .post_item_body h3 a”); //通过选择器查找所有博客链接DOM(范围重小到大)

for (Element e : linkElements) {

System.out.println(“博客标题:” + e.text());//超链接的内容

}

System.out.println(“--------------------带有href属性的a元素--------------------------------”);

Elements hrefElements = doc.select(“a[href]”); // 带有href属性的a元素

for (Element e : hrefElements) {

System.out.println(e.toString());

}

System.out.println(“------------------------查找扩展名为.png的图片----------------------------”);

Elements imgElements = doc.select(“img[src$=.png]”); // 查找扩展名为.png的图片DOM节点

for (Element e : imgElements) {

System.out.println(e.toString());

}

System.out.println(“------------------------获取第一个元素----------------------------”);

Element element = doc.getElementsByTag(“title”).first(); // 获取tag是title的所有DOM元素

String title = element.text(); // 返回元素的文本

System.out.println(“网页标题是:” + title);

}

五、Jsoup获取DOM元素属性值


/**

  • 获取 DOM 元素属性值

*/

@Test

public void test4() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements linkElements = doc.select(“#post_list .post_item .post_item_body h3 a”); //通过选择器查找所有博客链接DOM

for (Element e : linkElements) {

System.out.println(“博客标题:” + e.text());//获取里面所有的文本

System.out.println(“博客地址:” + e.attr(“href”));

System.out.println(“target:” + e.attr(“target”));

}

System.out.println(“------------------------友情链接----------------------------”);

Element linkElement = doc.select(“#friend_link”).first();

System.out.println(“纯文本:” + linkElement.text());//去掉 html

System.out.println(“------------------------Html----------------------------”);

System.out.println(“Html:” + linkElement.html());

}

/**

  • 获取文章的 url

*/

@Test

public void test5() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements linkElements = doc.select(“#post_list .post_item .post_item_body h3 a”); //通过选择器查找所有博客链接DOM

for (Element e : linkElements) {

System.out.println(e.attr(“href”));

}

}

注意:Element 的几个获取内容的方法区别

  1. text()            获取的是去掉了 html 元素,也就是只用元素内容

  2. toString()      DOM

  3. html()          获取里面所有的 html 包括文本

import org.apache.http.HttpEntity;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

import org.junit.Test;

import java.io.IOException;

public class Main {

/**

  • 输入一个网址返回这个网址的字符串

*/

public String getHtml(String str) throws IOException {

CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例

HttpGet httpget = new HttpGet(str); // 创建httpget实例

CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求

HttpEntity entity = response.getEntity(); // 获取返回实体

String content = EntityUtils.toString(entity, “utf-8”);

response.close(); // 关闭流和释放系统资源

return content;

}

/**

  • 爬取 博客园

  • 1、网页标题

  • 2、口号

*/

@Test

public void test() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements elements = doc.getElementsByTag(“title”); // 获取tag是title的所有DOM元素

Element element = elements.get(0); // 获取第1个元素

String title = element.text(); // 返回元素的文本

System.out.println(“网页标题:” + title);

Element element2 = doc.getElementById(“site_nav_top”); // 获取id=site_nav_top的DOM元素

String navTop = element2.text(); // 返回元素的文本

System.out.println(“口号:” + navTop);

}

/**

  • Jsoup 查找 DOM 元素

*/

@Test

public void test2() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements itemElements = doc.getElementsByClass(“post_item”); // 根据样式名称来查询DOM

System.out.println(“=输出post_item========”);

for (Element e : itemElements) {

System.out.println(e.html());//获取里面所有的 html 包括文本

System.out.println(“\n”);

}

Elements widthElements = doc.getElementsByAttribute(“width”); // 根据属性名称来查询DOM(id class type 等),用的少一般很难找用这种方法

System.out.println(“=输出with的DOM========”);

for (Element e : widthElements) {

System.out.println(e.toString());//不能用 e.html() 这里需要输出 DOM

}

//

Elements targetElements = doc.getElementsByAttributeValue(“target”, “_blank”);

System.out.println(“=输出target-_blank的DOM========”);

for (Element e : targetElements) {

System.out.println(e.toString());

}

}

/**

  • 有层级关系

*/

@Test

public void test3() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements linkElements = doc.select(“#post_list .post_item .post_item_body h3 a”); //通过选择器查找所有博客链接DOM(范围重小到大)

for (Element e : linkElements) {

System.out.println(“博客标题:” + e.text());//超链接的内容

}

System.out.println(“--------------------带有href属性的a元素--------------------------------”);

Elements hrefElements = doc.select(“a[href]”); // 带有href属性的a元素

for (Element e : hrefElements) {

System.out.println(e.toString());

}

System.out.println(“------------------------查找扩展名为.png的图片----------------------------”);

Elements imgElements = doc.select(“img[src$=.png]”); // 查找扩展名为.png的图片DOM节点

for (Element e : imgElements) {

System.out.println(e.toString());

}

System.out.println(“------------------------获取第一个元素----------------------------”);

Element element = doc.getElementsByTag(“title”).first(); // 获取tag是title的所有DOM元素

String title = element.text(); // 返回元素的文本

System.out.println(“网页标题是:” + title);

}

/**

  • 获取 DOM 元素属性值

*/

@Test

public void test4() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements linkElements = doc.select(“#post_list .post_item .post_item_body h3 a”); //通过选择器查找所有博客链接DOM

for (Element e : linkElements) {

System.out.println(“博客标题:” + e.text());//获取里面所有的文本

System.out.println(“博客地址:” + e.attr(“href”));

System.out.println(“target:” + e.attr(“target”));

}

System.out.println(“------------------------友情链接----------------------------”);

Element linkElement = doc.select(“#friend_link”).first();

System.out.println(“纯文本:” + linkElement.text());//去掉 html

System.out.println(“------------------------Html----------------------------”);

System.out.println(“Html:” + linkElement.html());

}

/**

  • 获取文章的 url

*/

@Test

public void test5() throws IOException {

Document doc = Jsoup.parse(getHtml(“http://www.cnblogs.com/”)); // 解析网页 得到文档对象

Elements linkElements = doc.select(“#post_list .post_item .post_item_body h3 a”); //通过选择器查找所有博客链接DOM

for (Element e : linkElements) {

System.out.println(e.attr(“href”));

}

}

}

六、Jsoup工具类


public class JsoupUtil {

/**

  • 获取value值

  • @param e

  • @return

*/

public static String getValue(Element e) {

return e.attr(“value”);

}

/**

  • 获取

  • 之间的文本

  • @param e

  • @return

*/

public static String getText(Element e) {

return e.text();

}

/**

  • 识别属性id的标签,一般一个html页面id唯一

  • @param body

  • @param id

  • @return

*/

public static Element getID(String body, String id) {

Document doc = Jsoup.parse(body);

// 所有#id的标签

Elements elements = doc.select(“#” + id);

// 返回第一个

return elements.first();

}

/**

  • 识别属性class的标签

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里免费领取前端全套学习资料

css源码pdf

JavaScript知识点
3513949945)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-bUT8io1f-1713513949945)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-jAXqCfpN-1713513949946)]

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里免费领取前端全套学习资料

[外链图片转存中…(img-wP3O6hbe-1713513949946)]

[外链图片转存中…(img-QW0qXAqx-1713513949946)]

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值