JAVA利用jsoup爬取html静态网页中的指定数据

本文介绍使用Jsoup库从特定静态网页抓取数据的方法,详细展示了如何解析HTML,获取通知通告及其链接,并将数据保存至本地文件的过程。

利用jsoup爬取html静态网页中的指定数据

描述

爬取指定静态页面的某个模块下的数据
这里爬取的网页链接是:
http://www.hljkjt.gov.cn/html/zwgk/tztg/list.html
下的通知通告内容,及每个通知通告对应的链接。
在这里插入图片描述
爬取的数据初步写入本地文件,效果如下:
在这里插入图片描述
创建maven项目,pom.xml文件:

	<dependencies>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.9.2</version>
        </dependency>
    </dependencies>

代码如下:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.FileWriter;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
        String url = "http://www.hljkjt.gov.cn/html/zwgk/tztg/list.html";
        String filePath = "C:\\Users\\Administrator\\Desktop\\crawler.txt";
        String ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36";
        Test t = new Test();
        t.getRes(url,filePath,ua);
    }

    public void getRes(String url,String filePath,String ua) throws IOException{
        //解析html
        Document doc = Jsoup.connect(url).timeout(5000).userAgent(ua).get();
        Elements listDiv = doc.getElementsByAttributeValue("class", "List_title");
        String h4 = "";
        String title = "";
        String href = "";
        String res = "";
        for (int i =0;i<listDiv.size();i++) {
            Elements listDivs = doc.getElementsByAttributeValue("class", "listn_box");
            h4 = listDivs.get(i).getElementsByTag("h4")+"\n";

            Elements a = listDiv.get(i).getElementsByTag("a");
            for(int j =0;j<a.size();j++){
                title = a.get(j).attr("title");
                href = a.get(j).attr("href");
                if(j == 0) {
                    res = h4 + "title:" + title + "\thref:http://www.hljkjt.gov.cn" + href + "\n";
                }else {
                    res = "title:" + title + "\thref:http://www.hljkjt.gov.cn" + href + "\n";
                }
                System.out.print(res);
                Test.saveAsFileWriter(res,filePath);
            }
        }

    }
    private static void saveAsFileWriter(String content,String filePath) {
        FileWriter fwriter = null;
        try {
            // true表示不覆盖原来的内容,而是加到文件的后面。若要覆盖原来的内容,直接省略这个参数就好
            fwriter = new FileWriter(filePath, true);
            fwriter.write(content);
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                fwriter.flush();
                fwriter.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

后面再将爬取的数据写入到mysql

### 使用 Jsoup 进行静态网页数据爬取 Jsoup 是一款功能强大的 Java 库,主要用于解析 HTML 文档并提取所需的数据。然而需要注意的是,Jsoup 只能处理静态页面的内容,即服务器返回的原始 HTML 数据[^1]。如果目标网站通过 JavaScript 动态加载部分内容,则这些动态生成的部分无法被 Jsoup 获取。 以下是基于引用中的描述所提供的一个简单示例代码: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; public class WebScraper { public static void main(String[] args) { try { // 发起 HTTP 请求并获取文档对象 Document doc = Jsoup.connect("http://www.example.com/").get(); // 提取特定标签内容 (例如所有的 a 链接) Elements links = doc.select("a[href]"); for (org.jsoup.nodes.Element link : links) { System.out.println(link.attr("href")); // 输出链接地址 System.out.println(link.text()); // 输出链接文字 } } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何利用 Jsoup指定 URL 的静态内容发起请求,并从中提取 `<a>` 标签的相关属性和文本信息[^2]。 对于需要存储爬取结果的情况,可以通过引入 MySQL 和 MyBatis 等工具来完成后续操作[^3]。不过这超出了当前问题的核心范围,在此不做深入展开。 #### 关于动态网页的局限性说明 由于 Jsoup 并不具备执行 JavaScript 脚本的能力,因此它不适合用来抓取由前端框架(如 React、Vue 或 Angular)渲染后的动态内容。针对这种情况,建议考虑 Selenium 或 Puppeteer 等支持浏览器自动化运行环境的技术方案作为替代选项。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@nanami

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

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

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

打赏作者

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

抵扣说明:

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

余额充值