Java爬虫入门:如何用Java抓取网页数据

2023-07-09 09:30:00 浏览数 (3094)

爬虫是什么?

爬虫,也叫网络爬虫或网页抓取,是一种自动从互联网上获取信息的程序或者脚本。爬虫可以根据一定的规则,模拟浏览器的行为,访问指定的网站,抓取网页上的数据,并进行存储或分析。

Java可以写爬虫吗?

Java是一种广泛使用的编程语言,具有跨平台、面向对象、高性能等特点。Java也可以用来编写爬虫程序,因为Java提供了很多网络编程和数据处理的类库,例如HttpURLConnection, Jsoup, HttpClient等。使用这些类库,可以方便地发送HTTP请求,解析HTML文档,提取所需的数据。

Java爬虫案例

下面给出一个简单的Java爬虫案例,用来抓取百度搜索结果的标题和链接。首先,我们需要导入以下几个类库:

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

然后,我们定义一个方法,用来发送HTTP请求,并返回响应的HTML文档:

public static Document getHtml(String url) throws IOException {
    // 创建一个URL对象
    URL u = new URL(url);
    // 打开一个HTTP连接
    HttpURLConnection conn = (HttpURLConnection) u.openConnection();
    // 设置请求方法为GET
    conn.setRequestMethod("GET");
    // 设置连接超时和读取超时时间
    conn.setConnectTimeout(5000);
    conn.setReadTimeout(5000);
    // 判断响应码是否为200
    if (conn.getResponseCode() == 200) {
        // 使用Jsoup解析HTML文档
        Document doc = Jsoup.parse(conn.getInputStream(), "utf-8", url);
        // 关闭连接
        conn.disconnect();
        // 返回文档对象
        return doc;
    } else {
        // 抛出异常
        throw new IOException("请求失败,响应码为" + conn.getResponseCode());
    }
}

接下来,我们定义一个方法,用来从HTML文档中提取搜索结果的标题和链接:

public static void parseHtml(Document doc) {
    // 选择所有包含搜索结果的div元素
    Elements results = doc.select("div.result");
    // 遍历每个div元素
    for (Element result : results) {
        // 选择标题中的a元素
        Element title = result.selectFirst("h3 a");
        // 获取标题文本和链接地址
        String text = title.text();
        String link = title.attr("href");
        // 打印标题和链接
        System.out.println(text);
        System.out.println(link);
    }
}

最后,我们定义一个主方法,用来调用上面的两个方法,并传入一个搜索关键词:

public static void main(String[] args) throws IOException {
    // 定义一个搜索关键词
    String keyword = "java";
    // 拼接百度搜索的URL地址
    String url = "https://www.baidu.com/s?wd=" + keyword;
    // 调用getHtml方法,获取HTML文档对象
    Document doc = getHtml(url);
    // 调用parseHtml方法,解析HTML文档,并打印搜索结果
    parseHtml(doc);
}

小结

很多人一听到爬虫第一反应就是python,beautifulsoup等,固执地认为爬虫就应该学python。但实际上爬虫可以用其他语言实现,比如本文提到的java,甚至可以使用C/C++去实现。一些技术并不是只有某些语言能特定实现,只不过python实现更易于被人接受而已。希望本文能给你带来一个全新的视角,不再局限于使用python编写爬虫!