JavaRush /Java 博客 /Random-ZH /使用jsoup库解析html
Сергей
第 40 级
Москва

使用jsoup库解析html

已在 Random-ZH 群组中发布
所以我们想从该网站获取具体信息。让我们看看如何逐步执行此操作。 使用 jsoup 库解析 html - 1首先我们需要获得Document. 这是我们的 html 页面的表示。Jsoup 有多种方法将站点变成Document. 连接到服务器
Document document = Jsoup.connect("https://hh.ru/").get();
Jsoup 本身连接到该站点。这种方法最简单,但只适合测试。还有更方便、更灵活的http客户端。另请记住,无论您使用什么 http 客户端,都应向请求添加一个标头,User-Agent其值例如为Chrome/81.0.4044.138. 使用此标头,服务器确定您从哪个设备连接。如果没有此标头,服务器会认为您是机器人并可能会禁止您。 从文件;
File file = new File("hh-test.html");
Document document = Jsoup.parse(file, "UTF-8", "hh.ru");
这是获取对象的主要方式Document。最后一个参数 "hh.ru"是基本 URI。这是从网站上存在的相对链接创建绝对链接所必需的。 从线路
String html =
                "<html>                                                                       " +
                "    <head>                                                                   " +
                "        <title href=\"hh.ru/vacancy?home\">                                  " +
                "            Работа в Москве, поиск персонала и публикация вакансий - hh.ru   " +
                "        </title>                                                             " +
                "    </head>                                                                  " +
                "    <body>                                                                   " +
                "        <div class=\"header main\">                                          " +
                "            <h1>Работа найдется для каждого</h1>                             " +
                "            <div>Поиск вакансий</div>                                        " +
                "        </div>                                                               " +
                "        <div class=\"content\">                                              " +
                "            <div>Вакансии дня</div>                                          " +
                "            <div id=\"123\">Компании дня</div>                               " +
                "            <div>Работа из дома</div>                                        " +
                "        </div>                                                               " +
                "    </body>                                                                  " +
                "</html>                                                                      ";

        Document document = Jsoup.parse(html, "hh.ru");
接下来,我将在这个 html 中演示该库,它代表一个简化的站点。 获取标签 解析时的主要任务是获取所需的标签。我们将使用方法来做到这一点select。请注意,它始终返回标签列表。如果未找到标签,则列表将为空。您需要传递一个 CSS 选择器,通过该选择器将搜索标签作为方法参数。我将更详细地讨论选择器,因为所有工作都归结为编写正确的选择器。通常我们需要组合它以使其返回单个标签。
Elements h1 = document.select("h1");
System.out.println(h1);
获取标签标签h1 输出:

<h1>Работа найдется для каждого</h1>
Elements titleElem = document.select("head > title");
获取标签title。该标志>选择title嵌套在标签内的标签head
Elements divs = document.select("body > div");
div获取嵌套的 标签body
Elements firstDiv = document.select("body > div:nth-child(1)");
获取div嵌套在 中的第一个标签body。通过序列号检索标签是一种不好的方法,因为它在网站上的位置可能会发生变化。最好使用绝对参数来定义标签。这些参数是属性classid
Elements contentElem = document.select("body > div.content");
获取一个div带有“content”类的标签,嵌套在body
Elements idElem = document.select("#123");
获取id为“123”的标签
Elements divHeader = document.select("body > div.header.main :not(h1)");
获取div带有“header”类和“main”类的标签,嵌套在 中body,但没有标签h1 。输出:

<div>
 Поиск вакансий
</div>
元素方法 一旦我们收到一个列表,Elements我们就可以从中提取数据。让我提醒您,选择器通常会搜索一个标签,即 尺寸必须Elements为 1。
elements.size();
找到的标签数量
elements.get(0);
从找到的标签列表中获取第一个标签
elements.text();
嵌入标签中的文本
elements.attr("href");
“href”属性值
elements.outerHtml();
标签的字符串表示如果需要快速获取元素选择器,请在浏览器中打开开发者面板(f12),右键单击该元素,“查看代码”,右键单击标签,然后“复制”复制选择器”。这样的选择器并不是最佳的,但它非常适合快速获得结果。 结论 这是使用 Jsoup 库的基础知识。但这对于解析站点来说已经足够了。为了自信地工作,您所需要做的就是在真实网站上练习编写选择器。ps这个库是用来解决38级的大问题的 使用 jsoup 库解析 html - 1使用 jsoup 库解析 html - 3
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION