【开源项目阅读】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);

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以用户为中心,酷开科技荣获“消费者服务之星”

在企业顺应消费升级的道路中&#xff0c;企业自身不仅要着力强化对于消费者服务意识的提升&#xff0c;并且要树立诚信自律的行业示范带头作用&#xff0c;助力消费环境稳中向好&#xff0c;不断满足人民群众对美好生活的期待。企业的发展需要消费者的认可&#xff0c;酷开科技…

iPhone解锁 AnyMP4 iPhone Unlocker

AnyMP4 iPhone Unlocker是一款功能强大的iPhone解锁软件&#xff0c;旨在帮助用户轻松解决iPhone密码忘记、设备锁定等问题。无论是屏幕密码、指纹解锁还是Face ID&#xff0c;该软件都能提供有效的解决方案。 这款软件支持多种iPhone型号&#xff0c;包括最新的iPhone 14系列…

【EEG信号处理】对信号进行模拟生成

生成信号的目的还是主要是为了学习和探究后面的分析方法&#xff1b;本文主要是对方法进行整理 瞬态 transient 瞬态信号是指的是一瞬间信号上去了&#xff0c;这种情况我们可以用在时域上高斯模拟 peaktime 1; % seconds width .12; ampl 9; gaus ampl * exp( -(EEG.tim…

真正免费的文件恢复软件easyrecovery2024中文版

easyrecovery数据恢复软件是一款广受好评的数据恢复工具&#xff0c;它能够有效地帮助用户恢复各种类型的文件。无论是照片、视频、音乐还是文档&#xff0c;都能轻松地找回这些重要文件。操作安全、用户可自主操作的数据恢复方案&#xff0c;它支持从各种各样的存储介质恢复删…

单片机最小系统是什么?包含哪几个部分?

单片机最小系统是什么&#xff1f;包含哪几个部分&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&…

【踏雪无痕的痕一】——认知的心病

目录 一、背景介绍二、思路&方案三、过程1.教育是最大的"炸片"2.逻辑对等性的认知(时间的保证)3.不要去猜一个人怎么想&#xff0c;要看一个人怎么做4.改变一个人的基础5.你想过和你能过上什么生活完全取决于你自己 四、总结 一、背景介绍 大多数人都只愿意看到…

【深度学习】pytorch 与 PyG 安装(pip安装)

【深度学习】pytorch 与 PyG 安装&#xff08;pip安装&#xff09; 一、PyTorch安装和配置&#xff08;一&#xff09;、安装 CUDA&#xff08;二&#xff09;、安装torch、torchvision、torchaudio三个组件&#xff08;1&#xff09;下载镜像文件&#xff08;2&#xff09;创建…

【前端高频面试题--Vue基础篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;前端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac;前端高频面试题--Vue基础篇 Vue基本原理双向绑定与MVVM模型Vue的优点计算属性与监听属性计算属性监…

使用QZipWriter来压缩文件

Qt 自带的压缩QZipWriter和解压QZipReader详解~含Demo-CSDN博客 示例代码1&#xff1a; 压缩一个文件&#xff1a; #include "qzipwriter_p.h" #include "qfileinfo.h" #include <QDebug> int main(int argc, char *argv[]) {QApplication a(argc…

机器学习8-决策树

决策树&#xff08;Decision Tree&#xff09;是一种强大且灵活的机器学习算法&#xff0c;可用于分类和回归问题。它通过从数据中学习一系列规则来建立模型&#xff0c;这些规则对输入数据进行递归的分割&#xff0c;直到达到某个终止条件。 决策树的构建过程&#xff1a; 1.…

1、卷积分类器

用 Kera 创建你的第一个计算机视觉模型。 数据集下载地址:链接:https://pan.quark.cn/s/f9a1428cf6e3 提取码:XJcv 文章目录 欢迎来到计算机视觉!简介卷积分类器训练分类器示例 - 训练一个卷积分类器步骤1 - 加载数据步骤2 - 定义预训练基步骤3 - 附加头步骤4 - 训练结论欢…

Composition Local

1.显示传参 package com.jmj.jetpackcomposecompositionlocalimport org.junit.Testimport org.junit.Assert.*/*** 显示传参*/ class ExplicitText {private fun Layout(){var color:String "黑色";//参数需要通过层层传递&#xff0c;比较繁琐Text(color)Grid(c…