Java爬取网页源码

 通过爬取HTML网页的源码,我们可以获取到网页中内容的基本信息,进而通过程序实现对数据的处理以及获取我们想要的数据。

那么如何使用Java爬取HTML网页的源码呢?

针对的是静态的、少量的服务器端数据,主要使用了URL类来访问互联网资源,通过GET方法请求HTTP/HTTPS协议。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
public class Main {
    public static void main(String[] args)
            throws Exception {
        URL url = new URL("https://www.baidu.com");
        BufferedReader reader = new BufferedReader
                (new InputStreamReader(url.openStream()));
        BufferedWriter writer = new BufferedWriter
                (new FileWriter("data.html"));
        String line;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
            writer.write(line);
            writer.newLine(); }
        reader.close();
        writer.close();
    }
}

如果想要发送其他请求或想要对网络请求有更深入的控制,我们就需要用到HttpURLConnection类。这时候,在释放资源的时候,需要调用disconnect方法断开http链接,防止线程溢出。

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class Main {

    public static void main(String[] args) {
        try {
            // 创建一个URL对象,指定要爬取的网址
            URL url = new URL("https://www.baidu.com");
            // 打开与该网址对应的HTTP连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            // 设置请求方法为GET
            conn.setRequestMethod("GET");

            // 检查响应状态码,如果为HTTP_OK,则继续执行下面的代码
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                // 获取响应输入流
                InputStream in = conn.getInputStream();
                // 创建一个BufferedReader对象,用于读取输入流中的内容
                BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                // 创建一个StringBuilder对象,用于存放读取到的内容
                StringBuilder response = new StringBuilder();
                // 创建一个String对象,用于存放每一行读取到的内容
                String line;

                // 循环读取输入流中的每一行,直到读取到空行
                while ((line = reader.readLine()) != null) {
                    // 将读取到的每一行添加到StringBuilder对象中
                    response.append(line);
                }

                // 关闭输入流
                in.close();
                // 关闭与该网址对应的HTTP连接
                conn.disconnect();

                // 输出读取到的内容
                System.out.println(response.toString());
            } else {
                // 如果响应状态码不为HTTP_OK,则输出错误信息
                System.out.println("Error retrieving web page");
            }
        } catch (Exception e) {
            // 捕获并输出异常信息
            e.printStackTrace();
        }
    }
}

如果还要对网页进行更加高效的操作,还需要使用到 jsoup 第三方库。😶‍🌫️

(限于作者水平等各种条件有限,jsoup库的使用还在探索中......)

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要爬取CNVD漏洞信息,可以使用Java中的HttpClient和Jsoup库来实现。具体步骤如下: 1. 使用HttpClient发送请求,获取CNVD漏洞列表页面的HTML源码。 ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://www.cnvd.org.cn/flaw/list.htm"); CloseableHttpResponse response = httpClient.execute(httpGet); String html = EntityUtils.toString(response.getEntity(), "UTF-8"); ``` 2. 使用Jsoup解析HTML源码,获取漏洞列表。 ```java Document doc = Jsoup.parse(html); Elements flawList = doc.select(".flaw_list tr:gt(0)"); for (Element flaw : flawList) { // 获取漏洞信息,如漏洞名称、CNVD-ID、公开日期、危害级别等 String name = flaw.select(".flaw_tit a").text(); String cnvdId = flaw.select(".flaw_list_c td:eq(1)").text(); String publicDate = flaw.select(".flaw_list_c td:eq(2)").text(); String severity = flaw.select(".flaw_list_c td:eq(3)").text(); // TODO: 处理漏洞信息 } ``` 3. 可以将获取到的漏洞信息存储到数据库或者文件中。 完整代码示例: ```java import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; public class CnvdCrawler { public static void main(String[] args) throws IOException { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://www.cnvd.org.cn/flaw/list.htm"); CloseableHttpResponse response = httpClient.execute(httpGet); String html = EntityUtils.toString(response.getEntity(), "UTF-8"); Document doc = Jsoup.parse(html); Elements flawList = doc.select(".flaw_list tr:gt(0)"); for (Element flaw : flawList) { String name = flaw.select(".flaw_tit a").text(); String cnvdId = flaw.select(".flaw_list_c td:eq(1)").text(); String publicDate = flaw.select(".flaw_list_c td:eq(2)").text(); String severity = flaw.select(".flaw_list_c td:eq(3)").text(); System.out.println(name + " " + cnvdId + " " + publicDate + " " + severity); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值