使用Java实现一个简单的网页爬虫

367 阅读4分钟

关于如何用Java实现网页爬取程序,能够使用的框架挺多的,简单介绍一下:

Java 爬虫的框架有哪些?

Java中常用的爬虫框架主要包括以下几种:

1、Jsoup: Jsoup是一款Java的HTML解析器,可以直接解析某个URL地址、HTML文本内容。它提供了非常便利的API,用于提取和操作数据,适用于小规模的数据抓取。

2、HttpClient: Apache HttpClient是处理HTTP请求的工具库。它支持自定义各种HTTP通讯细节,如:连接超时、代理服务器配置、提交数据等,适合与其他工具配合使用实现复杂的爬虫功能。

3、WebMagic: WebMagic是一个简单灵活的Java爬虫框架,它提供了简洁的API,可以定义抓取规则,支持多线程爬取、Json解析等功能,适合中大规模数据抓取。

4、Crawler4j: Crawler4j是一个Java编写的开源网络爬虫工具,支持多线程爬取、分布式抓取,适合于数据挖掘和搜索引擎技术。

5、Heritrix: Heritrix是由互联网档案馆开发的一款开源的网页爬虫软件,适合进行大规模的网页抓取,被广泛应用于互联网档案存储。

这些框架各有特点,适用于不同规模和复杂度的爬虫项目,选用时需根据项目需求和技术背景进行选择。

如何使用?

这里以Jsoup简单的演示一下

1、创建项目

首先创建一个Java Spring 项目或者 Spring Boot 项目,构建工具为Maven。(这里以 Spring Boot 项目为例)

2、导入maven依赖

 <dependencies>
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.13.1</version>
    </dependency>
    <!--  测试 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

3、创建测试用例

在这里我就直接在测试方法里写了,当然你也可以单独写一个工具类,传入url参数,然后直接获取,方便测试

import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate;

import java.io.IOException;

@SpringBootTest class SpringbootProjectTestApplicationTests {

@Test
void contextLoads() {
    // 这里以爬取CSDN文章为例
    String url = "https://blog.csdn.net/Wyxl990/article/details/135156748?spm=1001.2014.3001.5502"; // 目标网址
    try {
        // 发送请求获取网页内容
        Document document = Jsoup.connect(url).get();

        // 提取文章内容
        // 假设文章内容在一个特定的ID中,例如 "article_content"
        Element article = document.getElementById("article_content");
        if (article != null) {
            System.out.println("Article Content:\n" + article.text());
        } else {
            System.out.println("No article content found.");
        }

        // 提取所有图片链接
        Elements images = article.select("img[src]");
        System.out.println("Found " + images.size() + " images.");

        // 遍历并打印每个图片的src属性
        for (Element image : images) {
            System.out.println("Image URL: " + image.attr("src"));
        }

    } catch (IOException e) {
        // 异常处理
        e.printStackTrace();
    }

}

} 4、运行结果 运行结果如下图所示:

原网站如图所示: 地址:blog.csdn.net/Wyxl990/art…

图:

Alt text

测试结果如下图: Alt text

上面如何获取文章内容和文章内的图片,我们爬取的时候还可以爬取整个页面,获取其中的所有的链接,代码如下:

@Test void contextLoadsTest2() { // 这里以爬取CSDN文章为例 String url = "blog.csdn.net/Wyxl990/art…"; // 目标网址 try { // 发送请求获取网页内容 Document document = Jsoup.connect(url).get();

        // 解析并提取链接
        Elements links = document.select("a[href]");

        // 遍历每个链接
        for (Element link : links) {
            // 打印出链接的文本和URL
            System.out.println("Link Text: " + link.text());
            System.out.println("URL: " + link.attr("href"));
        }
    } catch (IOException e) {
        // 异常处理
        e.printStackTrace();
    }

}

测试结果如下:

Alt text

5、小结

在上面的示例中,使用了Jsoup来解析CSDN文章页面。首先,它通过getElementById("article_content")提取文章内容。这里的ID "article_content" 是基于CSDN页面的结构;你需要根据实际页面结构调整此ID。 然后,它会从这个文章元素中提取所有标签的src属性,以获取图片链接。

请注意,使用爬虫技术之前,需要确保:

1、替换URL为目标CSDN文章的实际地址。

2、仅用于合法目的,遵守CSDN网站的使用条款和爬虫政策。

3、尊重版权和知识产权,不要用于商业目的或侵犯作者权益。

另外,请注意,网页结构可能随时更改,所以这个代码可能需要根据CSDN网站的最新结构进行调整。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记和面经,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的, 7701页的阿里大佬写的刷题笔记,让我offer拿到手软

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑说编程i