当前位置: 首页 > news >正文

【开源项目阅读】Java爬虫抓取豆瓣图书信息

原项目链接

Java爬虫抓取豆瓣图书信息

本地运行

运行过程

另建项目,把四个源代码文件拷贝到自己的包下面
在这里插入图片描述
在代码爆红处按ALT+ENTER自动导入maven依赖
在这里插入图片描述
直接运行Main.main方法,启动项目
在这里插入图片描述

运行结果

在本地磁盘上生成三个xml文件
在这里插入图片描述
在这里插入图片描述
其中的内容即位爬取后到的图书信息,包括:

  • 书名
  • 作者名
  • 出版社名
  • isbn号
  • 图书对应的豆瓣链接
  • 图书封面图片地址

可惜并没有直接爬取到图书的内容,不过可以凭借爬取得到的图书元数据去其他网站获取电子版pdf

项目运行逻辑

  1. 使用apache提供的httpclient工具包,手动创建一个http客户端
  2. 使用该http客户端向豆瓣官网发送GET请求
  3. 获取response相应数据,类型为html页面
  4. 使用正则表达式工具匹配得到的html页面中有关图书信息的项
  5. 利用dom4j库将这些图书信息项转换成xml元素并存储到本地

收获

CloseableHttpClient接口

该接口代表一个http客户端,实现类可以是InternalHttpClient

创建一个默认http客户端

创建一个不使用代理的默认客户端,使用如下代码

CloseableHttpClient httpClient = HttpClients.createDefault();

创建一个使用代理的http客户端

CloseableHttpClient httpClient = HttpClients.custom().setProxy(new HttpHost(ip,port)).build();

上述代码可以拆解为

//新建一个完全默认的HttpClientBuilder
HttpClientBuilder hb = HttpClients.custom();
//为该HttpClientBuilder设置代理,setProxy方法修改当前hb的代理属性后,返回this自身
hb = hb.setProxy(new HttpHost(ip,port));
//调用build方法完成http客户端的构造
CloseableHttpClient httpClient = hb.build();

关于Java程序内设置的代理与操作系统设置的全局代理的关系,在这篇文章中有更详细的说明【Java程序代理与系统代理关系】

多个重复任务使用多线程解决

List<Thread> threadList = new LinkedList<Thread>();
while (...) {threadList.add(new AClassExtendsThread(...));
}
for (Thread thread:threadList) {thread.start();
}
for (Thread thread:threadList) {try {thread.join();} catch (InterruptedException e) {e.printStackTrace();}
}

使用dom4j写入xml文件

Writer fileWriter;
Element root;//xml根标签,内含要写入的所有信息,这些信息通过其他代码已经存入root中
String fileAddress;
try {fileWriter = new FileWriter(fileAddress);XMLWriter xmlWriter = new XMLWriter(fileWriter);xmlWriter.write(root);xmlWriter.close();System.out.println("[" + fileAddress + "]写入成功");
} catch (IOException e) {e.printStackTrace();
}

正则表达式匹配

String regex;//正则表达式
Pattern xxxRegex = Pattern.compile(regex);
m = xxxRegex.matcher(entityString);
while (m.find()) {//执行对应操作       
}

dom4j标签操作

Element为元素类,或标签类

Document newDocument = DocumentHelper.createDocument();
Element rootElement = newDocument.addElement("root");

添加属性代码

bookElement.addAttribute("id","attribute");

添加子标签代码

bookElement.addElement("name").setText(bookName);

相关文章:

【开源项目阅读】Java爬虫抓取豆瓣图书信息

原项目链接 Java爬虫抓取豆瓣图书信息 本地运行 运行过程 另建项目&#xff0c;把四个源代码文件拷贝到自己的包下面 在代码爆红处按ALTENTER自动导入maven依赖 直接运行Main.main方法&#xff0c;启动项目 运行结果 在本地磁盘上生成三个xml文件 其中的内容即位爬取…...

基于opencv-python模板匹配的银行卡号识别(附源码)

目录 介绍 数字模板处理 银行卡图片处理 导入数字模板 模板匹配及结果 介绍 我们有若干个银行卡图片和一个数字模板图片&#xff0c;如下图 我们的目的就是通过对银行卡图片进行一系列图像操作使得我们可以用这个数字模板检测出银行卡号。 数字模板处理 首先我们先对数…...

JAVA设计模式之建造者模式详解

建造者模式 1 建造者模式介绍 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式. 定义: 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 **建造者模式要解决的问题 ** 建造者模式可以将部件和其组装过程分开…...

ElasticSearch查询语句用法

查询用法包括&#xff1a;match、match_phrase、multi_match、query_string、term 1.match 1.1 不同字段权重 如果需要为不同字段设置不同权重&#xff0c;可以考虑使用bool查询的should子句来组合多个match查询&#xff0c;并为每个match查询设置不同的权重 {"query&…...

美国服务器如何

美国服务器在被选择名单里排名很高&#xff0c;那么美国服务器如何&#xff0c;美国服务器 适用于哪些场景&#xff0c;认可度高吗?接下来小编为您整理发布美国服务器如何的详细情况。 美国服务器通常以其高性能、高可靠性和安全性而受到认可&#xff0c;它们适用于多种业务场…...

远程主机可能不符合glibc和libstdc++ VS Code服务器的先决条件

报错信息 VSCode无法连接远程服务器&#xff0c;终端一直提醒&#xff1a; [22:46:01.906] > Waiting for server log... [22:46:01.936] > Waiting for server log... [22:46:01.951] > [22:46:01.967] > Waiting for server log... [22:46:01.982] > [22:…...

【python基础】sys.argv[]的使用方法

文章目录 前言一、sys.argv是什么&#xff1f;二、实例 前言 本文主要讲解sys.argv[]的使用方法。 一、sys.argv是什么&#xff1f; sys.arg[]的作用就是存储在运行python脚本时候从外部往被运行的py文件里面传递的参数&#xff0c;是一个列表对象。利用好这个属性可以极大的增…...

Element-Ui el-date-picker日期传值异常问题解决办法

首先&#xff0c;只要非常简单的组件引入写法&#xff1a; 然后myDate在data()中是字符串类型 myDate: ‘’ 然后增加一个方法在提交表单到后台的时候&#xff0c;用来转化日期对应到myDate成字符串类型&#xff0c;并且对应到java类 function checkType(value) {if (typeo…...

GO语言集成开发 JetBrains GoLand 2023 中文

JetBrains GoLand 2023是一款专为Go语言开发者打造的集成开发环境&#xff08;IDE&#xff09;。它基于IntelliJ IDEA平台&#xff0c;提供了丰富的功能和工具&#xff0c;旨在提高开发效率和质量。GoLand 2023具备强大的Go语言支持&#xff0c;包括语法高亮、自动补全、代码提…...

详细关于如何解决mfc140.dll丢失的步骤,有效修复mfc140.dll文件丢失的问题。

mfc140.dll文件是Microsoft Visual Studio 2015程序集之一&#xff0c;它包含用于支持多种功能的代码和库。当这个mfc140.dll文件丢失时&#xff0c;可能会导致相关程序运行出错甚至无法运行。很多用户可能会遇到mfc140.dll丢失的问题&#xff0c;但是这并不是不可解决的困难。…...

聚簇索引、非聚簇索引、回表、索引下推、覆盖索引

聚簇索引&#xff08;主键索引&#xff09; 非叶子节点上存储的是索引值&#xff0c;叶子节点上存储的是整行记录。 非聚簇索引&#xff08;非主键索引、二级索引&#xff09; 非叶子节点上存储的都是索引值&#xff0c;叶子节点上存储的是主键的值。非聚簇索引需要回表&…...

ES实战-book笔记1

#索引一个文档,-XPUT手动创建索引, curl -XPUT localhost:9200/get-together/_doc/1?pretty -H Content-Type: application/json -d {"name": "Elasticsearch Denver","organizer": "Lee" } #返回结果 {"_index" : "g…...

高防服务器出租的优势及特点

高防服务器出租是指租用具备高防御能力的服务器&#xff0c;用于应对网络攻击、保护网站和数据安全。那么为什么会选择高防服务器出租&#xff0c;小编为您整理发布高防服务器出租的优势及特点。 高防服务器通常具备以下特点&#xff1a; 1. 高性能硬件配置&#xff1a;高防服务…...

NTLM||LM算法lsasswinlogon进程

来填坑了&#xff0c;这篇blog我们就来讲一下mimikatz能抓到开机的密码的原理 1.lsass&&winlogon 不知道大家有没有好奇过&#xff0c;我们每次开机输入密码之后&#xff0c;电脑又怎么知道我们是否输入正确呢&#xff1f; &#xff1a;这就要的得益于我们的两个进程…...

transformer剪枝论文汇总

文章目录 NN Pruning摘要实验 大模型剪枝LLM-PrunerSparseGPT LTPVTPWidth & Depth PruningPatch SlimmingDynamicViTSPViTDynamicBERTViT SlimmingFastFormersNViTUVCPost-training pruning NN Pruning 《Block Pruning For Faster Transformers》 《为更快的transformer…...

使用 Ant Design 的 Upload 组件实现图片

文章目录 使用 Ant Design 的 Upload 组件实现图片Upload组件itemRender自定义上传列表项的渲染方式修改图片名上传图片上传链接中添加 Bearer Token 的请求头onPreview{handlePreview}上传成功后&#xff0c;如何隐藏上传列表 使用 Ant Design 的 Upload 组件实现图片 Upload…...

【知识图谱--第二讲知识图谱的表示】

知识图谱的表示 知识表示Knowledge Representation 知识表示方法知识图谱的符号表示基于图的知识表示与建模简单图建模-最简单的无向图有向标记图OWL与Ontology 知识图谱的向量表示 知识表示 Knowledge Representation 知识表示&#xff08;KR&#xff09;就是用易于计算机处…...

C语言---计算n的阶乘

阶乘的概念&#xff1a;一个正整数的阶乘&#xff08;factorial&#xff09;是所有小于及等于该数的正整数的积&#xff0c;且0的阶乘为1&#xff0c;自然数n的阶乘写作n! 。 任何大于等于1 的自然数n 阶乘表示方法&#xff1a; n!123…(n-1)n 或 n!n(n-1)! 0&#xff01;1 …...

材料非线性Matlab有限元编程:初应力法与初应变法

导读:本文主要围绕材料非线性问题的有限元Matlab编程求解进行介绍,重点围绕牛顿-拉普森法(切线刚度法)、初应力法、初应变法等三种非线性迭代方法的算法原理展开讲解,最后利用Matlab对材料非线性问题有限元迭代求解算法进行实现,展示了实现求解的核心代码。这些内容都将收…...

QT+OSG/osgEarth编译之八十二:osgdb_obj+Qt编译(一套代码、一套框架,跨平台编译,版本:OSG-3.6.5插件库osgdb_obj)

文章目录 一、osgdb_obj介绍二、文件分析三、pro文件四、编译实践一、osgdb_obj介绍 OBJ格式是一种标准的3D模型文件格式,它以纯文本形式存储关于3D模型的信息。这种格式最初由Wavefront Technologies为其高级可视化系统开发,后来被广泛应用于3D软件之间的数据交换。OBJ格式…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...