用 Java 实现爬虫 (爬取本地html中的人物信息并可视化人物关系)
创始人
2024-02-26 16:02:21
0

目录

爬虫简介

常用的工具框架

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

       org.jsoupjsoup1.10.2org.seleniumhq.seleniumselenium-java3.141.59io.github.bonigarciawebdrivermanager5.0.3

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()); // 拿到对应页面的documentString 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

相关内容

热门资讯

谷歌起诉爬虫公司SerpApi... IT之家 12 月 21 日消息,据科技媒体 The Verge 昨天报道,谷歌已对爬虫工具开发商 ...
两岸政策引发美国焦虑?郑丽文被... 在郑丽文当选国民党主席之后,为什么会引发美国的焦虑?美方约谈郑丽文,又对国民党提出了怎样的要求? 1...
给“信贷漏洞”打上“制度补丁” “我们对内控制度和信贷系统进行了全面完善和升级,进一步明确了贷前调查、贷中审查、贷后管理等各环节的操...
丈夫生前向情人转账上百万,妻子... 丈夫吴某在家突发疾病去世后,妻子刘某发现,二人婚姻存续期间,吴某曾与陈某存在不正当关系,并向其赠与大...
权威电商纠纷律师推荐,林之晨律... 在电商行业蓬勃发展的当下,电商纠纷日益增多,寻找一位权威、靠谱且性价比高的电商纠纷律师至关重要。那么...
湖北大冶警方:男子因家庭纠纷情... 大冶公安查处一起妨碍交通工具正常行驶案件 2025年12月20日15时许,我辖区居民刘某(男,41岁...
女子醉驾找人“摆平”被骗7万后... 因醉酒驾驶轻信他人“可摆平”的谎言被骗,女子葛某乙不堪压力自杀身亡。在实施诈骗的苏某被判刑并赔偿后,...
2026年,山西将实现政策范围... 近日,省医保局发布消息,我省通过提高保障水平、优化经办服务,切实减轻参保职工生育医疗负担,2025年...
原创 上... 上海之后,广州也出台18条政策,将大力扶持游戏电竞行业,继上海率先加码电竞产业扶持之后,广州的跟进并...