您现在的位置是:首页 > 编程 > 

【Java爬虫】002

2025-07-26 00:08:32
【Java爬虫】002 一、Jsoup概述1、简介jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。2、主要功能(1)从一个URL,文件或字符串中解析HTML;(2)可操作HTML元素、属性、文本;()使用DOM或CSS选择器来查、取出数据;二、解析三种数

【Java爬虫】002

一、Jsoup概述

1、简介

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

2、主要功能

(1)从一个URL,文件或字符串中解析HTML;

(2)可操作HTML元素、属性、文本;

()使用DOM或CSS选择器来查、取出数据;

二、解析三种数据源

1、解析Url

代码语言:javascript代码运行次数:0运行复制
    @Test
    //通过url获取文档并解析
    public void testParseUrl() throws Exception {
        //1、获取网页存入文档
        //1.1 写法1
        Document document = (";).get();
        //1.2 写法2
        //Document document = Jsoup.parse(new URL(";), 1000);
        //2、解析网页,通过标签获取title元素
        Element title = document.getElementsByTag("title").first();
        //、通过title元素获取title标签内部文字,并打印
        println(());//百度一下,你就知道
    }

问题说明:Jsoup可以直接抓取文档,为什么还要用HttpClent呢?

答:虽然使用Jsoup可以替代HttpClient直接发起请求解析数据,但是往往不会这样用,因为实际的开发过程中,需要使用到多线程,连接池,代理等等方式,而jsoup对这些的支持并不是很好,所以我们一般把jsoup仅仅作为Html解析工具使用。

2、解析字符串

代码语言:javascript代码运行次数:0运行复制
    @Test
    //解析字符串
    public void testParseString(){
        //1、创建字符串
        String html = "<html><head><title>First parse</title></head>"
                + "<body><p>Parsed HTML into a doc.</p></body></html>";
        //2、将字符串解析为文档
        Document document = Jsoup.parse(html);
        //、通过标签获取title元素
        Element title = document.getElementsByTag("title").first();
        //4、通过title元素获取title标签内部文字,并打印
        println(());//First parse
    }

、解析文件

代码语言:javascript代码运行次数:0运行复制
    @Test
    //解析文件
    public void testParseFile() throws Exception {
        //1、获取文件存入文档
        Document document = Jsoup.parse(new File("C:\\Users\\Administrator\\Desktop\\"), "utf8");
        //2、通过标签获取title元素
        Element title = document.getElementsByTag("title").first();
        //、通过title元素获取title标签内部文字,并打印
        println(());//First parse
    }

文件内容:

代码语言:javascript代码运行次数:0运行复制
<html><head><title>First parse</title></head><body><p>Parsed HTML into a doc.</p></body></html>
三、使用DOM方式获取数据

1、获取元素常用的四种的方法

代码语言:javascript代码运行次数:0运行复制
1、根据id查询元素getElementById

2、根据标签获取元素getElementsByTag

、根据class获取元素getElementsByClass

4、根据属性获取元素getElementsByAttribute
2、代码演示:
代码语言:javascript代码运行次数:0运行复制
package com.jsoup;

import org.jsoup.Jsoup;
import org.Document;
import org.Element;
import org.jsoup.select.Elements;
import org.junit.Test;

//通过DOM等的方式获取元素
public class TestGetElement {
    @Test
    //通过DOM的方式获取元素
    public void testDom(){
        //1、创建html字符串
        String html = "<!DOCTYPE html>\n" +
                "<html>\n" +
                "\t<head>\n" +
                "\t\t<meta charset=\"utf-8\">\n" +
                "\t\t<title>我是通过标签获取的标题</title>\n" +
                "\t</head>\n" +
                "\t<body>\n" +
                "\t\t<h1 id=\"h1\">我是根据ID获取的H1</h1>\n" +
                "\t\t<h2 class=\"h2\">我是根据CLASS获取的H2</h2>\n" +
                "\t\t<h align=\"center\">我是根据属性获取的H</h>\n" +
                "\t</body>\n" +
                "</html>\n";
        //2、解析字符串为文档
        Document document = Jsoup.parse(html);
        //、根据id查询元素getElementById
        Element h1 = document.getElementById("h1");
        println(());
        //4、根据标签获取元素getElementsByTag
        Elements title = document.getElementsByTag("title");
        println(());
        //5、根据class获取元素getElementsByClass
        Elements h2 = document.getElementsByClass("h2");
        println(());
        //6、根据属性获取元素getElementsByAttribute
        Elements align = document.getElementsByAttribute("align");
        println(());
        //我是根据ID获取的H1
        //我是通过标签获取的标题
        //我是根据CLASS获取的H2
        //我是根据属性获取的H
    }
}
四、获取元素中的内容

1、常用的功能

代码语言:javascript代码运行次数:0运行复制
1.从元素中获取id

2.从元素中获取classame

.从元素中获取属性的值attr

4.从元素中获取所有属性attributes

5.从元素中获取文本内容text

2、代码演示

代码语言:javascript代码运行次数:0运行复制
package com.jsoup;

import org.jsoup.Jsoup;
import org.Attribute;
import org.Attributes;
import org.Document;
import org.Element;
import org.junit.Test;

//获取元素的内容
public class TestGetElementContent {
    @Test
    //通过DOM的方式获取元素
    public void testDom(){
        //1、创建html字符串
        String html = "<!DOCTYPE html>\n" +
                "<html>\n" +
                "\t<head>\n" +
                "\t\t<meta charset=\"utf-8\">\n" +
                "\t\t<title>我是标题</title>\n" +
                "\t</head>\n" +
                "\t<body>\n" +
                "\t\t<h1 id=\"h1_id\" class=\"h1_class\" align=\"center\">我是H1,我有很多属性</h4>\n" +
                "\t</body>\n" +
                "</html>";
        //2、解析字符串为文档
        Document document = Jsoup.parse(html);
        //、根据id查询元素getElementById
        Element h1 = document.getElementById("h1_id");
        //4、从元素中获取id
        String id = h1.id();
        println(id);
        //5、从元素中获取classame
        String classame = ();
        println(classame);
        //6、从元素中获取属性的值attr
        String align = h1.attr("align");
        println(align);
        //7、从元素中获取所有属性attributes
        Attributes attributes = h1.attributes();
        for (Attribute attribute : attributes) {
            println(attribute.getValue());
        }
        //8、从元素中获取文本内容text
        String text = ();
        println(text);
        //h1_id
        //h1_class
        //center
        //h1_id
        //h1_class
        //center
        //我是H1,我有很多属性
    }
}
五、使用选择器语法查元素

1、概述

Jsoup elements对象支持类似于CSS (或jquery)的选择器语法,来实现非常强大和灵活的查功能。这个select 方法在Document, Element,或Elements对象中都可以使用。且是上下文相关的,因此可实现指定元素的过滤,或者链式选择访问。

Select方法将返回一个Elements集合,并提供一组方法来抽取和处理结果。

2、常用功能

tagname:通过标签查元素,比如:span

#id:通过ID查元素,比如:# city_bj

.class:通过class名称查元素,比如:.class_a

[attribute]:利用属性查元素,比如:[abc]

[attr=value]:利用属性值来查元素,比如:[class=s_name]

、代码演示

代码语言:javascript代码运行次数:0运行复制
package com.jsoup;

import org.jsoup.Jsoup;
import org.Document;
import org.Element;
import org.jsoup.select.Elements;
import org.junit.Test;

public class TestGetElementBySelector {
    @Test
    public void testSelector(){
        //1、创建html字符串
        String html = "<!DOCTYPE html>\n" +
                "<html>\n" +
                "\t<head>\n" +
                "\t\t<meta charset=\"utf-8\">\n" +
                "\t\t<title>我是通过标签获取的标题</title>\n" +
                "\t</head>\n" +
                "\t<body>\n" +
                "\t\t<h1 id=\"h1\">我是根据ID获取的H1</h1>\n" +
                "\t\t<h2 class=\"h2\">我是根据CLASS获取的H2</h2>\n" +
                "\t\t<h align=\"center\">我是根据属性(和属性值)获取的H</h>\n" +
                "\t\t<h4 align=\"center\">我是根据属性和属性值获取的H4</h4>\n" +
                "\t</body>\n" +
                "</html>";
        //2、解析字符串为文档
        Document document = Jsoup.parse(html);
        //、tagame:通过标签查元素
        Elements title = document.select("title");
        println(());
        //4、#id:通过ID查元素,注意ID都是唯一的
        Element h1 = document.select("#h1").first();
        println(());
        //5、.class:通过class名称查元素
        Element h2 = document.select(".h2").first();
        println(());
        //6、[attribute]:利用属性查元素
        Elements align = document.select("[align]");
        for (Element element : align) {
            println(());
        }
        //7、[attr=value]:利用属性值来查元素
        Elements elements = document.select("[align=center]");
        for (Element element : elements) {
            println(());
        }
        //我是通过标签获取的标题
        //我是根据ID获取的H1
        //我是根据CLASS获取的H2
        //我是根据属性(和属性值)获取的H
        //我是根据属性和属性值获取的H4
        //我是根据属性(和属性值)获取的H
        //我是根据属性和属性值获取的H4
    }
}
六、组合使用选择器语法查元素

1、常用组合

el#id:元素+ID,比如:h#city_bj;

:元素+class,比如:_a;

el[attr]:元素+属性名,比如:span[abc];

任意组合:比如:span[abc].s_name;

ancestor child:查某个元素下子元素,比如:.city_con li 查"city_con"下的所有li;

parent > child:查某个父元素下的直接子元素,比如:.city_con > ul > li 查city_con第一级(直接子元素)的ul,再所有ul下的第一级li;

parent > *:查某个父元素下所有直接子元素;

2、代码演示

代码语言:javascript代码运行次数:0运行复制
package com.jsoup;

import org.jsoup.Jsoup;
import org.Document;
import org.Element;
import org.jsoup.select.Elements;
import org.junit.Test;

public class TestGetElementBySelectorGroup {
    @Test
    public void testSelector(){
        //1、创建html字符串
        String html = "<!DOCTYPE html>\n" +
                "<html>\n" +
                "\t<head>\n" +
                "\t\t<meta charset=\"utf-8\">\n" +
                "\t\t<title>我是通过标签获取的标题</title>\n" +
                "\t</head>\n" +
                "\t<body>\n" +
                "\t\t<h1 id=\"h1\">我是根据ID获取的H1</h1>\n" +
                "\t\t<h1 id=\"h11\">我是根据ID获取的H11</h1>\n" +
                "\t\t<h2 class=\"h2\">我是根据CLASS获取的H2</h2>\n" +
                "\t\t<h2 class=\"h22\">我是根据CLASS获取的H22</h2>\n" +
                "\t\t<h align=\"center\">我是根据属性(和属性值)获取的H</h>\n" +
                "\t\t<h4 align=\"center\">我是根据属性和属性值获取的H4</h4>\n" +
                "\t\t<div>\n" +
                "\t\t\t<h1>我是div下的h1</h1>\n" +
                "\t\t\t<ul>\n" +
                "\t\t\t\t<li>大哥</li>\n" +
                "\t\t\t\t<li>二哥</li>\n" +
                "\t\t\t\t<li>三哥</li>\n" +
                "\t\t\t\t<li>四哥</li>\n" +
                "\t\t\t\t<li><h1>我是div下的ul下的li下的的h1</h1></li>\n" +
                "\t\t\t</ul>\n" +
                "\t\t</div>\n" +
                "\t</body>\n" +
                "</html>";
        //2、解析字符串为文档
        Document document = Jsoup.parse(html);
        //、el#id:元素+ID
        Element h11 = document.select("h1#h11").first();
        println(());
        //4、:元素+class
        Element h22 = document.select("h2.h22").first();
        println(());
        //5、el[attr]:元素+属性名
        Element halign = document.select("h[align]").first();
        println(h());
        //6、任意组合
        Element hAlignIsCenter = document.select("h[align=center]").first();
        println(());
        //7、ancestor child:查某个元素下子元素
        Elements div_li = document.select("div h1");
        for (Element element : div_li) {
            println(());
        }
        //8、parent > child:查某个父元素下的直接子元素
        Element childH1 = document.select("div > ul > li > h1").first();
        println(());
        //9、parent > *:查某个父元素下所有直接子元素
        Elements elements = document.select("div > *");
        for (Element element : elements) {
            println(());
        }
        //我是根据ID获取的H11
        //我是根据CLASS获取的H22
        //我是根据属性(和属性值)获取的H
        //我是根据属性(和属性值)获取的H
        //我是div下的h1
        //我是div下的ul下的li下的的h1
        //我是div下的ul下的li下的的h1
        //我是div下的h1
        //大哥 二哥 三哥 四哥 我是div下的ul下的li下的的h1
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除java爬虫jsoup学习笔记字符串

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1199149.html

相关标签:无
上传时间: 2025-07-23 14:25:04
留言与评论(共有 8 条评论)
本站网友 txt转pdf
8分钟前 发表
align) { println(()); } //7
本站网友 中国药监局网站
0秒前 发表
并提供一组方法来抽取和处理结果
本站网友 五十步笑百步出自
9分钟前 发表
因为实际的开发过程中
本站网友 东莞二手房网
20分钟前 发表
通过title元素获取title标签内部文字
本站网友 鱼肚的营养价值
18分钟前 发表
连接池
本站网友 plist
17分钟前 发表
常用的功能代码语言:javascript代码运行次数:0运行复制1.从元素中获取id 2.从元素中获取classame .从元素中获取属性的值attr 4.从元素中获取所有属性attributes 5.从元素中获取文本内容text2
本站网友 acu吧
17分钟前 发表
从元素中获取文本内容text String text = (); println(text); //h1_id //h1_class //center //h1_id //h1_class //center //我是H1