Java爬虫之Jsoup Document select详解

select详解

Document 继承自 Element 类。select方法将返回一个Elements集合。

1.通过标签名来查找:

测试代码:
<span>33</span>
<span>25</span>

select写法:Elements elements = document.select("span");

下面的例子都按照上面的格式来写,就不进行重复的标注了。

2.通过id来查找:

<span  id=\"mySpan\">36</span>
<span>20</span>

select写法: Elements elements = document.select("#mySpan");
//通过id来查找,使用方法跟css指定元素一样,用#

3.通过class名来查找:

<span class="myClass">36</span>
<span>20</span>

select写法:Elements elements = document.select(".myClass");
//使用方法跟css指定元素一样,用.

4.利用标签内属性名查找元素:

<span class="class1" id="id1">36</span>
<span class="class2" id="id2">36</span>

select写法:Elements elements = document.select("span[class=class1]span[id=id1]");
//规则为 标签名【属性名=属性值】,多个属性即多个【】,如上

5.利用标签内属性名前缀查找元素:

<span class="class1" >36</span>
<span class="class2" >22</span>

select写法:Elements elements = document.select("span[^cl]");
//规则为 标签名【^属性名前缀】,多个属性即多个【】

6.利用标签内属性名+正则表达式查找元素

对正则表达式不了解的同学下去一定要学习正则表达式哦,因为它在爬虫中可是很重要的。

<span class="ABC" >36</span>
<span class="ADE" >22</span>

select写法:Elements elements = document.select("span[class~=^AB]");
//规则为 标签名【属性名~=正则表达式】,以上的正则表达式的意思是查找class值以AB为开头的标签

7.利用标签文本包含某些内容来查找:

<span>36</span>
<span>22</span>

select写法:Elements elements = document.select("span:contains(3)");
//规则为 标签名:contains(文本值)

8.利用标签文本包含某些内容+正则表达式来查找:

<span>36</span>
<span>22</span>

select写法:Elements elements = document.select("span:matchesOwn(^3)");
//规则为 标签名:matchesOwn(正则表达式),以上的正则表式的意思是以文本值以3为开头的标签

当然select还有其他强大的功能,如果对select感兴趣的同学可以查看select API,我只是列出了获取网页特定内容所需要的select的基本语法,基本上对于大部分的爬虫需求来说已经足够了。

 

# 下来给大家展示一个使用select获取特定元素值的代码:
public class SelectDemo {
    public static void test(String html) {
        //采用Jsoup解析
        Document doc = Jsoup.parse(html);
        //System.out.println(html);

        //获取html标签中的内容
        Elements elements = doc.select("ul[class=gl-warp clearfix]")
                .select("li[class=gl-item]");

        for (Element ele : elements) {
            String JdbookID = ele.attr("data-sku");
            //out.println(JdbookID);
        }
    }
}

上面的代码是我爬京东图书提取图书的id的部分截取,可以看到select的用法与前面讲的没有什么区别。对于Element 这个类来说,如果我们要获取一个标签中的属性值或文本内容可以这样来做:

for (Element ele : elements) {
    String JdbookID = ele.attr("data-sku");     //获取data-sku的属性值
    //out.println(JdbookID);
    String text = ele.text();                   //获取当前标签(元素)的文本值
    //out.println(text);
}

9.获取table的下级tr标签数据

例:获取主tr

<tbody id="js_video_container">
    <tr>
        <td>1</td>
        <td>张三</td>
        <td>17</td>
        <td>山东</td>
        <td>邮箱</td>
    </tr>
    <tr>
        <td>2</td>
        <td>李四</td>
        <td>18</td>
        <td>哈尔滨</td>
        <td>邮箱</td>
    </tr>
    <tr>
        <td>3</td>
        <td>王五</td>
        <td>19</td>
        <td>北京</td>
        <td>
            <tbody id="js_video_container">
                <tr>
                    <td>One</td>
                    <td>南北</td>
                </tr>
            </tbody>
        </td>
    </tr>
</tbody>

实现

Elements rows = doc.select("tbody[id='js_video_container']>tr");

10.通过标签名来移除:

测试代码:
<tr>
    <td>1</td>
    <td>小鸟的昵称</td>
    <td>达人简介...</td>
    <td>
        <div class="sp-words">
            <em>标签one</em>
            <em>标签two</em>
            <em>标签内容
                <div>
                    <p>弹出层消息框!</p>
                </div>
            </em>
        </div>
    </td>
</tr>

select写法:

Elements elements = document.select("tr");

for (int i=0; i<elements.size(); i++)  {

    Elements tdList = elements.get(i).select("td");

    for (int m=0; m<tdList.size(); m++)  {

        switch(m)  {

            case 0:

                tdList.get(m).select("div[class='sp-words']>em").select("div").remove();

            case 1:

                ...

        }

    }

}

11.通过标签下标选择:

测试代码:
<div>
    <a href="www.baidu.com">baidu</a>
    <a href="fanyi.baidu.com">fanyi</a>
</div>

select写法:

Elements elements = document.select("div>a").eq(1).text();

---------------------------------Result---------------------------------------------

:fanyi

上面的代码实现div标签下重复多个a标签的情况根据位数选择标签对象

 

  • 12
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Jsoup的`Document`类提供了一系列用于选择HTML元素的方法,其中最常用的是`select`方法。该方法接受一个CSS选择器作为参数,并返回一个`Elements`对象,该对象包含所有符合选择器条件的元素。 以下是`Document`类中与`select`方法相关的API: 1. `select(String cssSelector)`:根据CSS选择器选择元素,并返回一个`Elements`对象。 例如: ```java Document doc = Jsoup.connect("http://example.com").get(); Elements links = doc.select("a[href]"); ``` 2. `selectFirst(String cssSelector)`:根据CSS选择器选择第一个匹配的元素,并返回一个`Element`对象。 例如: ```java Document doc = Jsoup.connect("http://example.com").get(); Element link = doc.selectFirst("a[href]"); ``` 3. `getElementsByTag(String tagName)`:根据标签名选择元素,并返回一个`Elements`对象。 例如: ```java Document doc = Jsoup.connect("http://example.com").get(); Elements paragraphs = doc.getElementsByTag("p"); ``` 4. `getElementsByClass(String className)`:根据类名选择元素,并返回一个`Elements`对象。 例如: ```java Document doc = Jsoup.connect("http://example.com").get(); Elements redElements = doc.getElementsByClass("red"); ``` 5. `getElementById(String id)`:根据ID选择元素,并返回一个`Element`对象。 例如: ```java Document doc = Jsoup.connect("http://example.com").get(); Element logo = doc.getElementById("logo"); ``` 请注意,这只能选择具有ID属性的元素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ノBye~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值