整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

爬虫之Jsoup学习

爬虫之Jsoup学习

、前言

jsoup 是一款Java 的HTML解析器,我们使用它可直接解析URL地址、HTML文本内容。除此之外,它提供了一套非常友好的API,使得我们可以比较便利的通过DOM,CSS等操作类型,获取对应网页元素属性及数据操作。

jsoup官网:https://jsoup.org/

二、核心功能

2.1、功能描述

① 从一个URL,文件或字符串中解析HTML

② 使用DOM或CSS选择器来查找、取出数据使用DOM或CSS选择器来查找、取出数据

③ 可操作HTML元素、属性、文本可操作HTML元素、属性、文本

Tips:jsoup是基于MIT协议发布的,可放心使用于商业项目

2.2、Maven地址

        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.11.3</version>
        </dependency>

三、核心API

6个包提供用于开发jsoup应用程序的类和接口。

org.jsoup

org.jsoup.examples

org.jsoup.helper

org.jsoup.nodes

org.jsoup.parser
org.jsoup.safety

org.jsoup.salect

主要类:

Jsoup 类提供了连接,清理和解析HTML文档的方法

Document 获取HTML文档

Element 获取、操作HTML节点

四、实例代码

4.1、三种加载HTML的方法


    public static void main(String[] args) {
        /* 从URL加载HTML */
        Document document=Jsoup.connect("http://www.baidu.com").get();
        String title=document.title();
        /* 获取html中的标题 */
        System.out.println("title :"+title);

        /* 从字符串加载HTML */
        String html="<html><head><title>First parse</title></head>"
                + "<body><p>Parsed HTML into a doc.</p></body></html>";
        Document doc=Jsoup.parse(html);
        title=doc.title();
        System.out.println("title :"+title);

        /* 从文件加载HTML */
        doc=Jsoup.parse(new File("F:\\jsoup\\html\\index.html"),"utf-8");
        title=doc.title();
        System.out.println("title :"+title);
    }

4.2、获取html中的head、body、url等信息


    public static void main(String[] args) {
        Document document=Jsoup.connect("http://www.baidu.com").get();
        String title=document.title();

        System.out.println("title :"+title);
        /* 获取html中的head */
        System.out.println(document.head());
        /* 获取html中的body */

        /* 获取HTML页面中的所有链接 */
        Elements links=document.select("a[href]");
        for (Element link : links){
            System.out.println("link : "+ link.attr("href"));
            System.out.println("text :"+ link.text());
        }
    }
 

4.3、获取URL的元信息


    public static void main(String[] args) {
        Document document=Jsoup.connect("https://passport.lagou.com").get();

        System.out.println(document.head());
        /* 获取URL的元信息 */
        String description=document.select("meta[name=description]").get(0).attr("content");
        System.out.println("Meta description : " + description);

        String keywords=document.select("meta[name=keywords]").first().attr("content");
        System.out.println("Meta keyword : " + keywords);
    }
 

4.4、根据class名称获取表单


    public static void main(String[] args) {
        Document document=Jsoup.connect("https://baidu.com").get();
        /* 获取拉勾网登入页面的body */
        /* System.out.println(document.body()); */
        /* 根据class名称获取表单 */
        Elements formElement=document.getElementsByClass("form_body");
        System.out.println(formElement.html());
        /* 获取URL的元信息 */
        for (Element inputElement : formElement) {
            String placeholder=inputElement.getElementsByTag("input").attr("placeholder");
            System.out.println(placeholder);
        }
    }
 

4.5、提取并打印表单参数


    public static void main(String[] args) {
        Document document=Jsoup.parse(new File("F:\\jsoup\\html\\login.html"),"utf-8");
        Element loginform=document.getElementById("registerform");

        Elements inputElements=loginform.getElementsByTag("input");
        for (Element inputElement : inputElements) {
            String key=inputElement.attr("name");
            String value=inputElement.attr("value");
            System.out.println("Param name: "+key+" -- Param value: "+value);
        }
    }
 

4.6、设置元素的html内容


    public static void main(String[] args) {
        Document document=Jsoup.parse(new File("F:\\jsoup\\html\\index.html"),"utf-8");
        System.out.println(document.body());
        System.out.println("*************");
        Element div=document.select("div").first();
        div.html("<p>Hello</p>");
        div.prepend("<p>Fiest</p>");
        div.append("<p>Last</p>");
        System.out.println(document.body());
        System.out.println(div.text());

        /* 对元素包裹一个外部HTML内容 */
        div.wrap("<div id=\"div2\"></div>");
        System.out.println(document.body());
    }
 

4.7、设置元素的文本内容

好不要在搜索引擎出现过

title标题最好不在搜索引擎出现过,可以尝试在搜索引擎进行搜索,适当地改变一下。


一次敲定后不要改动

title写好了最好不要动,尤其是在网站权重还较低的情况下。很多网站快照不更新就是因为title经常改动。title标题要仔细写,一次性写好后短时间内都不要改动,改动标题的风险是很大的。


加上h1标题标签

title标题在源码中,要加上h1标题标签,告诉搜索引擎,突显它的重要性。


切词的特殊符号使用

一般我们在网站标题描写中,经常使用的符号有:“,”(逗号)、“ 空格(空格)、“-”(英文下 的横线)、“—”(中文下的横线)、“|”(竖)、“_”(下划线)、“/”(斜杠)这些符号在标题中所起的作用及表达的意义是不一样的,不仅不同的分隔符在标题在所起的作用不一样,即使是同一分隔符在不同的搜索引擎里表达的意义也会有所差别。


控制title字数

title最多显示30个中文字符。网页标题中多余的部分搜索引擎都会自动切断。所以在写标题标签的时候,一般控制在30个中文字符以内。标题太长,会分散关键词的权重。


关键字搭配

关键字搭配是指关键字在标题中出现的前后位置、主次搭配。 搜索引擎对于页面信息的抓取,是由HTML代码中自上而下进行的, 所以在网页标题的最前面加上主关键字,可以很好地体现页面的主题内容。

TML 标题


在 HTML 文档中,标题很重要。


HTML 标题

标题(Heading)是通过 <h1> - <h6> 标签进行定义的。

<h1> 定义最大的标题。 <h6> 定义最小的标题。

实例

<h1>这是一个标题。</h1>

<h2>这是一个标题。</h2>

<h3>这是一个标题。</h3>

注释: 浏览器会自动地在标题的前后添加空行。


标题很重要

请确保将 HTML 标题 标签只用于标题。不要仅仅是为了生成粗体大号的文本而使用标题。

搜索引擎使用标题为您的网页的结构和内容编制索引。

因为用户可以通过标题来快速浏览您的网页,所以用标题来呈现文档结构是很重要的。

应该将 h1 用作主标题(最重要的),其后是 h2(次重要的),再其次是 h3,以此类推。


HTML 水平线

<hr> 标签在 HTML 页面中创建水平线。

hr 元素可用于分隔内容。

实例

<p>这是一个段落。</p>

<hr>

<p>这是一个段落。</p>

<hr>

<p>这是一个段落。</p>


HTML 注释

可以将注释插入 HTML 代码中,这样可以提高其可读性,使代码更易被人理解。浏览器会忽略注释,也不会显示它们。

注释写法如下:

实例

<!-- 这是一个注释 -->

注释: 开始括号之后(左边的括号)需要紧跟一个叹号,结束括号之前(右边的括号)不需要,合理地使用注释可以对未来的代码编辑工作产生帮助。


HTML 提示 - 如何查看源代码

你是否看过一些网页然后惊叹它是如何实现的。

如果您想找到其中的奥秘,只需要单击右键,然后选择"查看源文件"(IE)或"查看页面源代码"(Firefox),其他浏览器的做法也是类似的。这么做会打开一个包含页面 HTML 代码的窗口。


HTML 标签参考手册

菜鸟教程的标签参考手册提供了有关这些标题及其属性的更多信息。

您将在本教程下面的章节中学到更多有关 HTML 标签和属性的知识。