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 的几个获取内容的方法区别
-
text() 获取的是去掉了 html 元素,也就是只用元素内容
-
toString() DOM
-
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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。
3513949945)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-bUT8io1f-1713513949945)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
[外链图片转存中…(img-jAXqCfpN-1713513949946)]
最后
javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。
[外链图片转存中…(img-wP3O6hbe-1713513949946)]
[外链图片转存中…(img-QW0qXAqx-1713513949946)]