如何使用 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.jsoupgroupId>
<artifactId>jsoupartifactId>
<version>1.13.1version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
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.boot.test.context.SpringBootTest;
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、运行结果
运行结果如下图所示:
原网站如图所示:
地址:https://blog.csdn.net/Wyxl990/article/details/135156748?spm=1001.2014.3001.5502
图:
上面如何获取文章内容和文章内的图片,我们爬取的时候还可以爬取整个页面,获取其中的所有的链接,代码如下:
@Test
void contextLoadsTest2() {
// 这里以爬取CSDN文章为例
String url = "https://blog.csdn.net/Wyxl990/article/details/135156748?spm=1001.2014.3001.5502"; // 目标网址
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();
}
}
测试结果如下:
5、小结
在上面的示例中,使用了Jsoup来解析CSDN文章页面。首先,它通过getElementById(“article_content”)提取文章内容。这里的ID “article_content” 是基于CSDN页面的结构;你需要根据实际页面结构调整此ID。
然后,它会从这个文章元素中提取所有标签的src属性,以获取图片链接。
请注意,使用爬虫技术之前,需要确保:
1、替换URL为目标CSDN文章的实际地址。
2、仅用于合法目的,遵守CSDN网站的使用条款和爬虫政策。
3、尊重版权和知识产权,不要用于商业目的或侵犯作者权益。
另外,请注意,网页结构可能随时更改,所以这个代码可能需要根据CSDN网站的最新结构进行调整。
求一键三连:点赞、分享、收藏
点赞对我真的非常重要!在线求赞,加个关注我会非常感激!@小郑聊编程