爬虫入门案例——Java还能用来写爬虫?

目录

前言

入门案例

依赖导入

爬虫代码

注意事项

爬取结果

总结


前言

我们在和Python程序员交流的时候,经常会听到他们谈论和爬虫相关的事,爬这个网站,爬那个网站的。这个时候如果听不懂的话,气氛就显得尴尬了。事实上我们Java程序员是有自己的爬虫的!那么和Python相比,Java实现的爬虫有什么不同呢?下面我们来看看两者有什么区别,用一个简单的案例来体验如何用Java实现网络爬虫。以后在和Python程序员交流的时候,多少能插上两句话,还可以显摆显摆。

爬虫不是用Python写的吗?Java也能写爬虫?

爬虫是指一种技术,用于在众多公开的网站和网页中爬取相关的数据。Java也有爬虫库和框架,例如Jsoup和WebMagic。只不过Python的爬虫库和框架更丰富,所以爬虫这种活都是用Python来干。

Java写的爬虫和Python写的有什么区别呢?

1. Java是一种静态类型语言,它需要更多的代码和类型声明来完成相同的任务。相比之下,Python是一种动态类型语言,它的语法更简洁,更易于学习和使用。这使得Python在快速原型开发和小规模爬取任务上更具优势,而Java则更适合于大规模和复杂的爬取任务。

2. Java是一种编译型语言,通常比Python更快。Java爬虫可以处理更大规模的数据和更复杂的任务。然而,Python的解释器在处理简单任务和小规模数据时更加高效。

**3.**Java是一种跨平台语言,可以在不同的操作系统上运行。Python也是跨平台的,但在某些操作系统上可能需要额外的配置和依赖。

可以看得出Java不仅仅是可以用来写爬虫,而且在某些方面是具有优势的。

入门案例

我们以百度热搜为例,爬取热榜的信息。

依赖导入

java 复制代码
<dependency>
    <!-- jsoup HTML parser library @ https://jsoup.org/ -->
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.17.1</version>
</dependency>

爬虫代码

java 复制代码
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;
import java.util.ArrayList;
import java.util.List;

@SpringBootTest
class DemoApplicationTests {

    @Test
    public void test() throws IOException {

        // 获取Document对象,这就是JavaScript中的Document对象
        Document doc = Jsoup.connect("https://top.baidu.com/board?tab=realtime").get();
        // 获取所有div标签
        Elements elements = doc.getElementsByTag("div");

        // 暂时将爬取的结果放入list1集合中
        List<String> list1 = new ArrayList<>();
        // 遍历所有Element对象,获取内容并转成字符串
        for (Element element : elements) {
            String s1 = element.getElementsByClass("c-single-text-ellipsis").eq(0).text();
            String s2 = element.getElementsByClass("hot-desc_1m_jR large_nSuFU ").eq(0).text();
            if (!s1.equals("") && !s2.equals("")) {
                list1.add(s1 + "\n" + s2);
            }
        }

        // 对爬取的内容去重
        List<String> list2 = list1.stream().distinct().toList();

        // 遍历打印
        for (String s : list2) {
            System.out.println(s);
            System.out.println("====================================================================");
        }
    }
}

注意事项

我们直接爬取出来的数据是很乱的,需要进行数据处理。那么在爬取数据的时候具体要怎么爬,要先去分析网页的布局是什么样的,如我们案例中的:

可以看到我们要爬取的数据都是在div标签中的,并且是在class属性为"c-single-text-ellipsis"和"hot-desc_1m_jR large_nSuFU "的div标签中。所以分析是很重要的,先利用数据的特征将其爬取,然后再对数据进行处理。

爬取结果

我们可以对比着网页来看,可以看到爬取成功了。

总结

到此我们就成功利用Java实现了网络爬虫的小案例,快点自己去试试吧。当然想用好爬虫还是很难的,毕竟不是所有网站都可以随便的爬取,会有对应的反爬取措施。

相关推荐
gopher95111 分钟前
final,finally,finalize的区别
java·开发语言·jvm
m0_687399847 分钟前
QT combox 前缀匹配
开发语言·数据库·qt
Jason-河山9 分钟前
利用 Python 爬虫采集 1688商品详情
java·http
计算机源码社9 分钟前
分享一个餐饮连锁店点餐系统 餐馆食材采购系统Java、python、php三个版本(源码、调试、LW、开题、PPT)
java·python·php·毕业设计项目·计算机课程设计·计算机毕业设计源码·计算机毕业设计选题
Zww089113 分钟前
idea插件市场安装没反应
java·ide·intellij-idea
夜雨翦春韭15 分钟前
【代码随想录Day31】贪心算法Part05
java·数据结构·算法·leetcode·贪心算法
汤兰月15 分钟前
Python中的观察者模式:从基础到实战
开发语言·python·观察者模式
计算机学姐15 分钟前
基于微信小程序的调查问卷管理系统
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
DieSnowK16 分钟前
[C++][第三方库][httplib]详细讲解
服务器·开发语言·c++·http·第三方库·新手向·httplib
火红的小辣椒21 分钟前
PHP反序列化8(phar反序列化)
开发语言·web安全·php