谈谈Java爬虫

news/2024/7/19 11:24:42 标签: java, 爬虫, python

说起网络爬虫,大家想起的估计都是 Python ,我在没有接触Java爬虫之前也是只听过python是为爬虫而生。不过俗话说的好:Java是世界最好的语言

于是我就在网上查询有关于Java爬虫的资料,不查不知道一查吓一跳,其实 Java 也能做网络爬虫并且还有专门的库,并且Java在某些复杂页面做爬虫还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic

Python 相对Java的优点:

  1. Python作为动态语言更适合初学编程者。Python可以让初学者把精力集中在编程对象和思维方法上,而不用去担心语法、类型等等外在因素。而Python清晰简洁的语法也使得它调试起来比Java简单的多。
  2. Python有一些Java没有的强大的架构。
  3. Python有非常强大的支持异步的框架如Eventlet Networking Library,而Java要实现这些功能要麻烦的多。也因此Python适合一些可扩展的后台应用。(但除此以外Python可扩展性是不如Java的)
  4. Python作为脚本语言,更适合开发小的应用,而且极其适合在应用发展初期时用来做原型

Python 相对Java的缺点:

  1. 由于Python的优点也无可避免会有牺牲------由于是动态语言,比Java还慢。
  2. Java很适合发展跨平台应用,几乎常见的电脑、智能机都能跑Java。而Python就不一样了——对于一般性的需求无论Java还是python都可以胜任。如需要模拟登陆、对抗防采集选择python更方便些,如果需要处理复杂的网页,解析网页内容生成结构化数据或者对网页内容精细的解析则可以选择Java。

不过我今天要讲的是Java中较为简单的爬虫方法:

1. 直接请求数据结构
2. 等网页渲染出明文内容后,从前端页面的内容抓取

直接请求数据结构

针对一些页面不复杂,数据简单并且没有加密的数据,我们可以直接通过F12查看该页面获取数据所调用的接口。然后直接请求数据结构,在爬虫中这种方法是最轻松的,例如:HttpClient、OKHttp、RestTemplate、Hutool

等网页渲染出明文内容后,从前端页面的内容抓取

Java针对于爬虫有一个专门的工具:Jsoup(官网地址:http://jsoup.org/ )。jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

示例:我们以bing的图片库为例

爬取我们哥哥的帅图
在这里插入图片描述

先引入jsoup依赖

java"><--maven 依赖-->
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.15.3</version>
</dependency>

Demo

在这里插入图片描述

java">   @Test
    void test() throws IOException {
    	//表示第几个图片开始
        int current = 1;
        //url地址
        String url = "https://cn.bing.com/images/search?q=小黑子&first=" + current;
        Document doc = Jsoup.connect(url).get();
        //通过css选择器拿到数据
        Elements elements = doc.select(".iuscp.isv");
        List<Picture> pictures = new ArrayList<>();
        for (Element element : elements) {
            // 取图片地址(murl)
            String m = element.select(".iusc").get(0).attr("m");
            Map<String, Object> map = JSONUtil.toBean(m, Map.class);
            String murl = (String) map.get("murl");
//            System.out.println(murl);
            // 取标题
            String title = element.select(".inflnk").get(0).attr("aria-label");
//            System.out.println(title);
            Picture picture = new Picture();
            picture.setTitle(title);
            picture.setUrl(murl);
            pictures.add(picture);
        }
        System.out.println(pictures);
    }

使用在这方法主要就是先要去了解你所需要爬取的页面的css层级结构

最后:
注意,爬虫技术不能滥用,千万不要给别人的系统造成压力、不要侵犯他人权益!


http://www.niftyadmin.cn/n/184000.html

相关文章

Codeforces Round 861 (Div. 2)(C~E1)

Problem - C - Codeforces 思路&#xff1a; 我们从低位凑到高位&#xff0c;因为尽可能unlucky&#xff0c;所以我们保证凑的数字是相同的如1111&#xff0c;4444等&#xff08;每次前i位相同&#xff0c;其余位数不变&#xff09;只要我们当前凑的这个数字符合范围&#xf…

【JDBC-Druid-JdbcTemplate】使用JdbcTemplate(通过Druid连接池)的方式操作数据库

【JDBC-Druid-JdbcTemplate】使用JdbcTemplate&#xff08;通过Druid连接池&#xff09;的方式操作数据库1&#xff09;导入依赖2&#xff09;定义JdbcUtils工具类2.1.定义工具类获取DruidDataSource2.2.配置druid.properties3&#xff09;通过定义好的JdbcUtils工具类使用Jdbc…

【Android入门到项目实战--4.5】—— SQLite数据库存储实现增删改查

目录 一、添加数据 二、更新数据 三、删除数据 四、查询数据 使用完整SQL语言操作数据库 1、添加数据 2、更新数据 3、删除数据 4、查询数据 前面学习了创建和升级数据库&#xff0c;本篇文章主要讲解SQLite数据库存储实现增删改查&#xff08;CRUD&#xff09;操作。 …

Qt Glog toStdWString转char* 中文乱码

#include <QTextCodec>void LogWriter::init(void) {InitGoogleLogging("ui-fundus");char log_path[256] {0};FLAGS_stderrthreshold GLOG_INFO; // INFO WARNING ERROR FATAL, 是输出到stderr(app Output/cli)的阀值FLAGS_alsologtostderr false; // 当这…

Vue-条件渲染的基本使用(v-if,v-show,v-else相关指令使用)

条件渲染 顾名思义&#xff0c;就是符合哪些条件&#xff0c;就渲染哪些东西&#xff0c;其实就是几个指令的使用 先做一个小例子 我想让这个div时而显示&#xff0c;时而隐藏&#xff0c;可以在两者之间进行切换&#xff0c;那么使用原生的方式实现&#xff0c;想到的是用dis…

ChatGPT探索系列之二:学习GPT模型系列的发展历程和原理

文章目录前言一、GPT的起源GPT系列二、GPT的原理1. GPT原理&#xff1a;自注意2. GPT原理&#xff1a;位置编码3. GPT原理&#xff1a;Masked Language Modeling4. GPT原理&#xff1a;预训练5. GPT原理&#xff1a;微调6. GPT原理&#xff1a;多任务学习三、GPT模型的风险与挑…

springCloud学习【5】之分布式搜索引擎(2)

文章目录前言一 DSL查询文档1.1 DSL查询分类1.2 全文检索查询1.3 精准查询1.4 地理坐标查询1.5 复合查询1.5.1 算分函数查询1.5.2 布尔查询二 结果处理2.1 排序2.1.1 普通字段排序2.1.2 地理坐标排序2.2 分页2.2.1 基本的分页2.2.2 深度分页问题2.3 小结2.4 高亮三 RestClient查…

冲击蓝桥杯-并查集,前缀和,字符串

目录 前言 一、并查集 1、并查集的合并&#xff08;带路径压缩&#xff09; 2、询问是否为同一个集合 3、例题 二、前缀和 1 、前缀和是什么 2、经典题目 三- 字符串处理 1、字符串的插入 2、字符串转化为int类型 3、字符反转 前言 并查集合前缀&#xff0c;字符串…