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

导读:本篇文章讲解 用 Java 实现爬虫 (爬取本地html中的人物信息并可视化人物关系),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

爬虫简介

常用的工具框架

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是一棵多叉树。

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

通过Jsoup元素获取

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

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

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

 用 Java 实现爬虫 (爬取本地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

使用爬虫要注意

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

查看网站的爬虫协议

网站 + /robots.txt

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/92761.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!