美文网首页我爱编程
Jsoup实战_1_选择器

Jsoup实战_1_选择器

作者: lkee6760 | 来源:发表于2018-05-21 21:16 被阅读32次
图文无关,出处见水印

Jsoup简介

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

Demo演示

需求: 爬取携程故宫景点信息
链接: 【携程攻略】故宫门票,北京故宫攻略/地址/图片/门票价格
爬取位置:

故宫景点简介
html代码:
<pre style="margin: 8px 0px;"><ul class="s_sight_in_list">
    <li>
        <span class="s_sight_classic">等&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;级:</span>
        <span class="s_sight_con">AAAAA</span>
    </li>
    <li>
        <span class="s_sight_classic">电&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;话:</span>
        <span class="s_sight_con">010-85007938</span>
    </li>
    <li>
        <span class="s_sight_classic">官方网站:</span>
        <span class="s_sight_con">
            <a rel="nofollow" class="breakurl" href="http://www.dpm.org.cn/Home.html" target="_blank">http://www.dpm.org.cn/Home.html</a>
        </span>
    </li>
</ul></pre>

爬虫代码:

@Test
public void func1() throws IOException {
  String url = "http://you.ctrip.com/sight/beijing1/229.html";
  Connection con = Jsoup.connect(url).timeout(30000);
  // 设置用户代理
  con.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3192.0 Safari/537.36");
  Document doc = con.get();
  // 景点简介部分
  Element select = doc.selectFirst(".s_sight_in_list");
  System.out.println(select.text());
}

爬取效果:

提取页面的部分数据在控制台打印
设计好表格就可以入库了。

Jsoup选择器

选择器对象由org.jsoup.nodes.Documentorg.jsoup.nodes.Elementorg.jsoup.select.Elements组成, 其中Element是核心类

public class Document extends Element
public class Elements extends ArrayList<Element>
public class Element extends Node

一个HTML元素(Element)由一个标签、若干属性、若干子节点(子节点包括文本节点和其它标签节点)组成。从Element的实例中, 你可以提取数据, 遍历节点图和修改当前元素

元素筛选

  1. 查找元素
getElementById(String id): 通过id获取元素
getElementsByTag(String tag): 通过标签名获取元素
getElementsByClass(String className): 通过标签class属性获取元素
getElementsByAttribute(String key) (and related methods): 通过标签属性获取元素
Element siblings:
siblingElements(): 全部同级元素
firstElementSibling(): 第一个同级元素
lastElementSibling(): 最后一个同级元素
nextElementSibling(): 下一个同级元素
previousElementSibling(): 前一个同级元素
Graph:
parent(): 父级元素
children(): 子级元素
child(int index): 第几个子级元素

选择器更加详尽的使用方式请参考参考1

  1. 元素数据
attr(String key): 获取属性
attr(String key, String value): 设置属性
attributes(): 获取所有属性
id(): 获取当前元素的id属性
className(): 获取当前元素所有的class属性的字符串
classNames(): 获取当前元素所有的class属性的数组
text(): 获取文本内容
text(String value): 设置文本内容
html(): 获取元素内HTML
html(String value): 设置元素内的HTML内容
outerHtml(): 获取元素外HTML内容
data(): 获取数据内容(例如:script和style标签)
tag(): 获取当前标签对象
tagName(): 获取当前标签名
  1. 操作HTML和文本
append(String html): 将html文本添加到当前元素内, 在添加前会被解析, 再把解析出的每个节点添加到当前元素的子节点最后面
prepend(String html): 将html文本添加到当前元素内, 在添加前会被解析, 再把解析出的每个节点添加到当前元素的子节点最前面
appendText(String text): 创建并添加一个新的文本节点到当前元素子节点的后面
prependText(String text): 创建并添加一个新的文本节点到当前元素的子节点的前面
appendElement(String tagName): 通过标签名创建一个元素, 并添加到当前元素子节点的后面
prependElement(String tagName): 通过标签名创建一个元素, 并添加到当前元素子节点的前面
html(String value): 当前元素内如果存在节点则清除, 在设置html内容

实践

  1. 获取照片的链接


    缩略图链接获取
@Test
public void func3() throws IOException {

    String url = "http://you.ctrip.com/sight/beijing1/229.html";
    Connection con = Jsoup.connect(url).timeout(30000);
    // 设置用户代理
    con.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3192.0 Safari/537.36");
    Document doc = con.get();
    Element imgTag = doc.selectFirst("div.s_sight_map img");
    String src = imgTag.attr("src");
    System.out.println("照片的链接: " + src);
}

效果

控制台打印效果
  1. 获取标签文本


    只获取"条点评"文本
<dfn id="hrefyyDp"><span class="f_orange">55994</span>条点评</dfn>
@Test
public void func3() throws IOException {

    String url = "http://you.ctrip.com/sight/beijing1/229.html";
    Connection con = Jsoup.connect(url).timeout(30000);
    // 设置用户代理
    con.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3192.0 Safari/537.36");
    Document doc = con.get();
    Element imgTag = doc.selectFirst("#hrefyyDp");
    String text = imgTag.ownText();
    System.out.println(text);
}

效果

image.png

参考内容

  1. 使用jsoup选择器来查找元素 - CSDN博客
  2. Jsoup API 帮助文档

相关文章

网友评论

    本文标题:Jsoup实战_1_选择器

    本文链接:https://www.haomeiwen.com/subject/tqwzdftx.html