整合营销服务商

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

免费咨询热线:

java 如何解析网页?

发送HTTP请求:首先,你需要向目标网页发送HTTP请求以获取其HTML内容。这可以通过Java的内置库java.net.HttpURLConnection或者使用更高级的库如Apache Http Client OkHttp等来完成。

·读取响应内容:一旦你发送了请求并收到了响应,你需要读取响应的内容,这通常是HTML格式的字符串。

·解析HTML:然后,你需要解析HTML字符串以提取所需的信息,这可以通过正则表达式来完成。但通常建议使用专门的HTML解析库,如Jsoup。Jsoup提供了一种非常方便的方式来解析HTML文档,并可以通过类似于CSS或jQuery的选择器语法来提取和操作数据。

·如果你需要处理更复杂的网页或进行更高级的网页抓取和解析任务,你可能还需要考虑使用如Selenium这样的浏览器自动化工具来模拟真实的浏览器行为。但是请注意,频繁或大规模地抓取网页可能会违反网站的使用条款甚至可能构成法律问题。

soup

抓取网页后,需要对网页解析,可以使用字符串处理工具解析页面,也可以使用正则表达式

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

jsoup的主要功能如下:

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

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

3.可操作HTML元素、属性、文本;

创建练习类

解析URL

第一个参数是访问的url,第二个参数是访问的超时时间

使用标签选择器,获取title标签中的内容

输出结果

读取文件

准备一个简易的HTML文件

获取这个

读取文件,获取字符串,代码及结果

使用dom方式遍历文档

解析文件获取document对象

依据id获取,这个是id的内容,我们获取这个内容

编写代码,显示结果

依据标签获取,我们获取这个标签的内容

代码及结果

依据class获取,获取内容

代码和结果

依据属性,属性内容

代码和结果

接下来从元素中获取数据

首先从元素中获取ID

从元素中获取className

文本

代码及结果

如果内容是两个class

那么代码及结果

从元素中获取属性

代码及结果

获取元素的所有属性

代码及结果

从元素中获取文本内容,这个之前有,代码和结果

、前言

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、设置元素的文本内容