获取小说站点章节列表

第一次写博客,写得不好请见谅
目的是让自己印象更加深刻,锻炼自己表达能力,同时可以和大家一起交流学习,大神勿喷!
本次学习教程来自吾爱破解小说站点爬虫-spring-mybatis-jsoup-http-client
讲师:昕悦阁丶风雪


目录

  • 获取小说站点章节列表

    • 观察章节列表所用到的元素
    • 创建maven项目及配置
      • 创建maven项目
      • 配置项目
    • 编写代码
      • 1编写章节实体类 Chapterjava
      • 2编写章节接口 IChapterSpiderjava
      • 3编写抽象类AbstractChapterSpiderjava
      • 4编写实现类DefaultChapterSpiderjava
      • 5编写测试工具类TestCase
    • 测试
    • 源码下载

观察章节列表所用到的元素

章节列表所用到的元素,如a标签、table标签等

打开笔趣阁-圣墟网页,查看所列的章节列表

查看源代码

可以发现每一个章节都使用了dd和a标签,且章节都在id=list下,所以不难理解为每个章节从#list到dd标签再到a标签。

大家可以去各大小说站点观察发现

以下是我所观察的小说站点及对应的章节所使用的元素

顶点小说23wx.com
#at td a笔下文学bxwx8.org
#TabCss dd a笔趣阁biquge.tw
#list dd a

创建maven项目及配置

本项目是eclipse创建的

创建maven项目

File–>new–>Maven Project

配置项目

右击项目选择Properties

  1. 选择Java Build Path–>Libraries
    选中JER System Library 点击Edit
    选择自己安装的jdk版本,这里我用的是jdk1.8.0_121

  2. 选择Java Compiler设置与jdk相应的Compiler compliance level

3.配置pom.xml文件,下载所需要的jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>luohong</groupId><artifactId>novel.spider</artifactId><version>0.0.1-SNAPSHOT</version><!-- 依赖包 --><dependencies><!-- HTML解析器工具 --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.9.2</version></dependency><!-- Http传输协议工具包 --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version></dependency><!-- 解析xml工具包 --><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><!-- 单元测试工具包 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency></dependencies>
</project>

4.项目结构

编写代码

1、编写章节实体类 Chapter.java

package novel.spider.model;import java.io.Serializable;
/*** 小说的章节实体* @author luohong* @date 2017年2月12日*/
public class Chapter implements Serializable {private static final long serialVersionUID = 1L;private String title; // 标题名private String url;  // 链接public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((title == null) ? 0 : title.hashCode());result = prime * result + ((url == null) ? 0 : url.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Chapter other = (Chapter) obj;if (title == null) {if (other.title != null)return false;} else if (!title.equals(other.title))return false;if (url == null) {if (other.url != null)return false;} else if (!url.equals(other.url))return false;return true;}@Overridepublic String toString() {return "Chapter [title=" + title + ", url=" + url + "]";}}

2、编写章节接口 IChapterSpider.java

package novel.spider.interfaces;import java.util.List;import novel.spider.model.Chapter;/*** 小说章节接口* @author luohong* @date 2017年2月12日*/
public interface IChapterSpider {/*** 获取章节列表方法* @param url 小说url* @return*/public List<Chapter> getChapter(String url);
}

3、编写抽象类AbstractChapterSpider.java

package novel.spider.impl;import java.util.ArrayList;
import java.util.List;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;import novel.spider.interfaces.IChapterSpider;
import novel.spider.model.Chapter;/*** 抽象类* * @author luohong* @date 2017年2月12日*/
public class AbstractChapterSpider implements IChapterSpider {/*** 抓取数据方法* * @param url 抓取链接* @return* @throws Exception*/protected String crawl(String url) throws Exception {// 通过HttpClientBuilder返回httpClient实体try (CloseableHttpClient httpClient = HttpClientBuilder.create().build();CloseableHttpResponse httpResponse = httpClient.execute(new HttpGet(url))) {// 获取抓取结果String result = EntityUtils.toString(httpResponse.getEntity());return result;} catch (Exception e) {throw new RuntimeException(e);}}@Overridepublic List<Chapter> getChapter(String url) {try {String result = crawl(url);//System.out.println(url);//System.out.println(result);/*** Jsoup解析、Document选择器*/Document document =  Jsoup.parse(result,"utf-8");Elements elements = document.select("#list dd a");List<Chapter> chapters = new ArrayList<>();for(Element element:elements){Chapter chapter = new Chapter();/*** <a style="" href="/86_86745/4504833.html">第一章 沙漠中的彼岸花</a>*/chapter.setTitle(element.text());chapter.setUrl(url+element.attr("href"));chapters.add(chapter);}return chapters;} catch (Exception e) {throw new RuntimeException(e);}}}

4、编写实现类DefaultChapterSpider.java

package novel.spider.impl;/*** 实现类* @author luohong* @date 2017年2月12日*/
public class DefaultChapterSpider extends AbstractChapterSpider{}

5、编写测试工具类TestCase

package novel.spider.junit;import java.util.List;import org.junit.Test;import novel.spider.impl.DefaultChapterSpider;
import novel.spider.interfaces.IChapterSpider;
import novel.spider.model.Chapter;/*** 测试工具类* @author luohong* @date 2017年2月12日*/
public class TestCase {@Testpublic void test1() throws Exception{IChapterSpider spider = new DefaultChapterSpider();List<Chapter> chapters = spider.getChapter("http://www.biquge.tw/86_86745/");for(Chapter chapter:chapters){System.out.println(chapter);}}
}

测试

上面测试类用的地址是

http://www.biquge.tw/86_86745/

右击TestCase.java的test1()方法,选择Run As –>Junit Test 开始测试
控制台输出如下

看到能抓取数据粗来,好开心,就先到这吧。。。后面还会继续学习,再见!

border="0" width="298" height="52" src="//music.163.com/outchain/player?type=2&id=36102163&auto=1&height=32">

源码下载

下载地址

学习笔记-spring-mybatis-jsoup-http-client小说站点爬虫(1)--获取小说站点章节列表相关推荐

  1. Spring学习笔记--spring+mybatis集成

    前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...

  2. Spring学习笔记之MyBatis

    系列文章目录 Spring学习笔记 之 Springhttps://blog.csdn.net/weixin_43985478/article/details/124411746?spm=1001.2 ...

  3. Spring 学习系列 -- Spring + Mybatis 从零开始配置多数据源访问

    目的: 项目中以前有整合mybatis + spring操作数据库,但是以前都是单数据库,现需要实现mybatis访问多数据源,依旧使用spring调用mybatis. 通过注解的方式整合 sprin ...

  4. R语言学习笔记(八)--读写文件与网络爬虫

    R语言学习笔记(八) 1 工作路径 2 保存R对象 3 Scan函数 3-1 从控制台读取数据 3-2 从txt文件读取数据 3-3 从url读取数据 4 按行读写文本文件 5 读取文本文件(txt. ...

  5. 学习笔记---Spring 5

    Spring 5 1. 介绍 1.1 简介 历史:2002年,首次推出了 Spring 框架的雏形:interface 21.2004年3月24日,Spring诞生,发布了 1.0 正式版本. Rod ...

  6. Java学习笔记10-2——MyBatis

    文章目录 MyBatis详细执行流程 使用注解开发 面向接口开发 使用注解开发 复杂查询 多对一问题 测试环境搭建 按照查询嵌套处理(子查询.嵌套查询) 按照结果查询(联表查询.联合查询) 一对多问题 ...

  7. 【学习笔记】Mybatis框架学习及个人感悟

    文章目录 一.简介 1.1.什么是Mybatis 1.2.持久化 1.3.为什么需要Mybatis 二.第一个Mybatis程序 2.1.搭建环境 2.2.创建一个子模块 2.3.编写代码 2.4.测 ...

  8. 学习笔记:MyBatis

    越学接触的越多,到了后面难免会混淆和不知所云.所以记下次笔记,能既多少是多好吧.还有每日学完一章就做好总结,因为回过头再做总结就又要复习一遍,我的记性太差了. 未觉池塘春草梦, 阶前梧叶已秋声. 第一 ...

  9. Java学习笔记之Mybatis

    1. Mybatis 1.1 MyBatis介绍 MyBatis 是一款优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的过程 MyBatis 可以使用简 ...

最新文章

  1. css文本居中的几种方式
  2. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17
  3. java日常笔记、对象的创建完全是由构造方法实现的吗?this的本质
  4. android连接SQLite数据库-----增加改查+分页
  5. android侧边栏点击,侧边菜单栏 android-menudrawer
  6. android接口类命名规范_Android开发规范
  7. Linux系统启动流程和GRUB解释
  8. A Story of One Country (Hard) CodeForces - 1181E2 (分治)
  9. Java多线程之FutureTask
  10. Javac选项source和target的作用
  11. 如何识别服务器连接的偶发故障?
  12. 15个国外最好的电子商务建站程序
  13. 10个 安卓应用商店开发者公司账号注册(2022最新最全)
  14. 热烈祝贺“UTONMOS第一届公会会长圆桌会议”圆满举行
  15. 帅哥陈 Hololens开发笔记(1)
  16. 哪里​可以​找到​SPICE​仿真​模型(转)
  17. APP开发技术架构方案
  18. C++版本OpenCv教程(二十七)图像中添加高斯噪声
  19. 基于vue-element-ui的一款表格设计器table-making
  20. Oracle数据库静默模式小节(LINUX 11G)

热门文章

  1. 控制面板里打印服务器显示叹号,Windows7打印图标显示叹号无法打印,怎么办?请按照以下步骤操作...
  2. windows server 2003 修改Administrator登录密码
  3. SSM 框架的学习(一):系统架构介绍
  4. iPhone 4S 听筒的拆解与安装
  5. 什么是商务标、技术标、经济标
  6. 开箱即用:100个Linux Shell脚本经典案例解析
  7. 读书感受 之 《月亮与六便士》
  8. SQL-ORCL数据库的创建和插入数据、关于列的操作
  9. 【Unity3D小功能】Unity3D中实现UI擦除效果、刮刮卡功能
  10. 边界值测试实战:关于佣金计算问题