用 Java 实现爬虫 (爬取本地html中的人物信息并可视化人物关系)

news2025/1/18 17:02:51

目录

爬虫简介

常用的工具框架

selenium + Jsoup

Jsoup介绍

Jsoup的主要功能如下:

HTML 相关知识

通过Jsoup元素获取

案例 爬取本地html中的角色信息

HtmlParseUtil

可以利用relation-graph 将人物关系可视化

使用爬虫要注意

查看网站的爬虫协议


爬虫简介

网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数据采集一般只有以下几种情况:

1) 搜索引擎

2) 竞品调研

3) 舆情监控

4) 市场分析

网络爬虫的整体执行流程:

1) 确定一个(多个)种子网页

2) 进行数据的内容提取

3) 将网页中的关联网页连接提取出来

4) 将尚未爬取的关联网页内容放到一个队列中

5) 从队列中取出一个待爬取的页面,判断之前是否爬过。

6) 把没有爬过的进行爬取,并进行之前的重复操作。

7) 直到队列中没有新的内容,爬虫执行结束。

引自:
Java实现爬虫_马小屑的博客-CSDN博客_java爬虫

常用的工具框架

使用的技术可以有以下几类

1) 原生代码实现:

  a) URL类

2) 使用第三方的URL库

  a) HttpClient库

3) 开源爬虫框架

  a) Heritrix

  b) Nutch

selenium + Jsoup

本例采用框架 selenium 来模拟访问浏览器,并且爬取页面源代码,然后使用Jsoup进行解析并抓取相关信息。

相关pom

       <!--爬虫相关-->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.10.2</version>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.141.59</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.github.bonigarcia/webdrivermanager -->
        <dependency>
            <groupId>io.github.bonigarcia</groupId>
            <artifactId>webdrivermanager</artifactId>
            <version>5.0.3</version>
        </dependency>

Jsoup介绍

我们抓取到页面之后,还需要对页面进行解析。可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些方法都会带来很大的开发成,所以我们需要使用一款专门解析html页而的技术。

 jsoup是一款ava的HTML解析器,可直接解析某个URL地址、HTML文木内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。


Jsoup的主要功能如下:


1.从一个URL,文件或字符串中解析HTML:
2.使用DOM或CSS选择器来查找、取出数据:
3.可操作HTML元素、属性、文本:

Ps:虽然使用Jsoup可以替代HttpClient直接发起请求解析数据,但是往往
不会这样用,因为实际的开发过程中,需要使用到多线程,连接池,代理等等方
式,而jsoup对这些的支持并不是很好,所以我们一般把jsoup仅仅作为Html
解析工具使用,而且有时候不能抓取所有的页面源代码

HTML 相关知识

只需要了解dom即可,dom是一棵多叉树。

通过Jsoup元素获取


1.根据id查询元素 getElementByld()
2.根据标签获取元素 getElementsByTag()
3.根据class获取元素 getElementsByClass()
4.根据属性获取元素 getElementsByAttribute()

案例 爬取本地html中的角色信息

可以获得角色的姓名,介绍,头像,海报,语音等信息。

 

HtmlParseUtil

public class HtmlParseUtil {
    static WebDriver driver;
    static {
        // 使用 web驱动来模拟试用浏览器
        WebDriverManager.chromedriver().setup();
        driver = new ChromeDriver(); // 可以使用多种浏览器的驱动
    }
    static int idx = 1;

    /**
     * 下载miHoYo 角色页面的源码并且解析
     *
     * @param Country 国家
     * @param id      人物id
     * @return {@link Character}
     * @throws Exception 异常
     */
    public Character parsemiHoYo(String Country, int id) throws Exception {
        String url = 网站链接 + Country + "?char=" + id;
        driver.get(url);
        Document document = Jsoup.parse(driver.getPageSource()); // 拿到对应页面的document

        String intro = document.getElementsByClass("character__intro-content").eq(id).text();
        String posterImg = document.getElementsByClass("character__person animated").attr("src");

        Elements charPage = document.getElementsByClass("character__page");
        Elements elements = charPage.first().getElementsByTag("li");
        Element el = elements.get(id);
        String name = el.getElementsByTag("p").text();
        String headImg = el.getElementsByTag("img").attr("src");

        Character character = new Character(idx++, name, intro, headImg, posterImg, "",Country);
        return character;
    }

}

package com.PaiMon.Pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Character implements Serializable {

    /**
     * id
     */
    int id;
    /**
     * 名字
     */
    String name;
    /**
     * 介绍
     */
    String intro;
    /**
     * 头像
     */
    String headImg;
    /**
     * 海报
     */
    String posterImg;
    /**
     * 属性
     */
    String attribute;
    /**
     * 国家
     */
    String country;
}

可以利用relation-graph 将人物关系可视化

https://github.com/VeniVeci/Paimon

使用爬虫要注意

查看网站的爬虫协议

网站 + /robots.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试:ANR原因及排查

ANR原因 1、CPU满负荷&#xff0c;I/O阻塞 2、内存不足&#xff0c;系统分配给一个应用的内存是有上限的&#xff0c;长期处于内存紧张&#xff0c;会导致频繁内存交换&#xff0c;进而导致应用的一些操作超时。自己内存泄漏或者其他应用占用的大量内存 3、四大组件ANR 4、…

字符串压缩(一)之ZSTD

一、zstd压缩与解压 ZSTD_compress属于ZSTD的Simple API范畴&#xff0c;只有压缩级别可以设置。 ZSTD_compress函数原型如下&#xff1a; size_t ZSTD_compress(void* dst, size_t dstCapacity, const void* src, size_t srcSize, int compressionLevel) ZSTD_decompress函数原…

Mysql replace into

CREATE TABLE t (id int(11) NOT NULL AUTO_INCREMENT,age int(11) DEFAULT NULL,msg varchar(10) DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY uniq_age (age) ) ENGINEInnoDB DEFAULT CHARSETutf8;insert into t (age, msg) values (1,aaa),(2,bbb),(3,ccc);id 为自增主键、ag…

「重学JS」你真的懂数据类型吗?

前言 学习了这么久前端&#xff0c;发现自己对于基础知识的掌握并没有那么通透&#xff0c;于是打算重新学一遍JS&#xff0c;引用经济学的一句话&#xff1a;JS基础决定能力高度&#x1f926;&#x1f3fb; 基础很重要&#xff0c;只有基础好才会很少出 bug&#xff0c;大多数…

aws cloudformation 理解常见资源的部署和使用

参考 cfn101-workshopaws cli cloudformation cloudformation是aws的iac工具&#xff0c;以下简称cfn 环境搭建——cfn命令行工具 创建堆栈 aws cloudformation create-stack --stack-name testtemp \--template-body file://testtemp.yaml# --parameters ParameterKeyKey…

二叉树的循环问题

目录 一、二叉树的完全性检验 二、前序遍历的非递归写法 三、中序遍历的非递归写法 四、后序遍历的非递归写法 一、二叉树的完全性检验 给定一个二叉树的 root &#xff0c;确定它是否是一个 完全二叉树 。 在一个 完全二叉树 中&#xff0c;除了最后一个关卡外&#xff0c…

Vue脚手架

脚手架 安装步骤 全局安装vue/cli npm install -g vue/cli 安装之后使用不了vue的命令&#xff0c;查看nodejs文件发现我把vue装在了node_globalnpm这个文件夹中。 解决方法&#xff1a;新增一条path指向该文件夹 切换到你要创建的目录创建脚手架 vue create 项目名称 根据…

[附源码]Python计算机毕业设计Django保护濒危动物公益网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

【Hack The Box】linux练习-- Talkative

HTB 学习笔记 【Hack The Box】linux练习-- Talkative &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月27日&#x1f334; &#x…

初始数据结构

目录 1. 集合的框架 集合框架的重要性 数据结构的介绍 算法的介绍 容器背后对应的数据结构 2. 时间复杂度和空间复杂度 算法效率 时间复杂度 时间复杂度的概念 大O的渐进表示法 常见的时间复杂度的计算 空间复杂度 空间复杂度的概念 从本章开始又要开始新的篇章&a…

[附源码]Python计算机毕业设计Django班级事务管理论文2022

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

k8s上部署Harbor通过Nginx-Ingress域名访问

目录 1、k8s集群环境&#xff0c;通过kubesphere安装部署。 1.1 集群基本信息 1.2 集群节点信息 2、安装Harbor 2.1、使用Helm添加Harbor仓库 2.2 、通过openssl生成证书 2.3、 创建secret 2.4、 创建nfs存储目录 2.5、 创建pv 2.6、创建pvc 2.7、values.yaml配置文件 2.…

3-UI自动化-八大元素定位,xpath定位方式和相关的常问面试题

3-UI自动化-八大元素定位&#xff0c;xpath定位方式和相关的常问面试题八大元素定位八大元素定位的使用通过xpath定位xpath语法1. xpath逻辑运算定位2. 层级条件定位3. 索引定位4. 文本定位text()WebElement对象WebElement对象常用属性WebElement对象常用方法find_element()和 …

【Mybatis编程:插入和根据id删除相册数据】

目录 1. Mybatis编程&#xff1a;插入相册数据 2. Mybatis编程&#xff1a;根据id删除相册数据 1. Mybatis编程&#xff1a;插入相册数据 当某个数据表中的id被设计为“自动编号”的&#xff08;auto_increment&#xff09;&#xff0c;在配置<insert>标签时&#xff0…

开心公寓房屋出租管理系统的设计与实现(系统源码+技术文档+论文)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

基于51单片机病房呼叫系统(64位病床)

资料编号&#xff1a;189 下面是仿真演示&#xff1a; 189-基于51单片机病房呼叫系统&#xff08;64位病床&#xff09;&#xff08;仿真源程序原理图全套资料&#xff09;功能介绍&#xff1a; 设计一个可容64张床位的比那个房呼叫系统。 1、每个床位都有一个按钮&#xf…

InnoDB存储引擎简介

InnoDB存储引擎是一种兼顾高可靠性和高性能的通用存储引擎&#xff0c;在MySQL5.5之后&#xff0c;被选为MySQL的默认存储引擎 InnoDB的特点 1 DML操作循环ACID模型&#xff0c;支持事务 这里就印出了我们之前的知识点 DML操作就是我们对数据进行 增删除查改操作 ACID分别代表…

HTML小游戏14 —— H5横版冒险游戏《无限生机》(附完整源码)

&#x1f482; 网站推荐:【神级源码资源网】【摸鱼小游戏】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】&#x1f4ac; 免费且实用的计…

[ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(三)CSRF相关面试题

​ &#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成…

Azure CDN

Azure CDN Azure CDN 是服务器的分发网络&#xff0c;可以将网页内容更高效地分发给终端用户。 CDN在POP点的边缘服务器缓存内容&#xff0c;这样更临近终端用户&#xff0c;延迟低。 Azure CDN 给开发者提供全球解决方案&#xff0c;能够将内容放在全球各个节点&#xff0c;提…