爬虫入门案例——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不仅仅是可以用来写爬虫,而且在某些方面是具有优势的。 

入门案例

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

依赖导入

<dependency>
    <!-- jsoup HTML parser library @ https://jsoup.org/ -->
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.17.1</version>
</dependency>

爬虫代码

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实现了网络爬虫的小案例,快点自己去试试吧。当然想用好爬虫还是很难的,毕竟不是所有网站都可以随便的爬取,会有对应的反爬取措施。

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值