最近迷上了天蚕土豆写的《大主宰》这本玄幻小说,无奈找不到下载链接。于是就萌生了自己爬取小说章节的想法,代码其实很简单,主要在于分析网页结构、正则匹配以及文件保存.

1. 分析网页结构

爬取小说主要需要爬取章节、正文,以及能保证爬取到所有的章节。以《大主宰》为例,其网页结构如下:

可以看到小说正文包含在一个id为content的div里,这极大的帮助了我们的爬取.章节名称保存在一个名为readtitle的js变量中.下一页的url位于a标签的href属性中

2. 正则匹配

通过分析网页结构,可以得到如下正则表达式:
* 章节名: readtitle = "(.+?)"
* 正文: <div id="content">(.+?)</div>
* 下一章:&rarr; <a href="(.+?)">
如果当前章节是最新章节,那么其下一章的url是以 / 开头的,我们可以根据这个判断章节是否是最新章节.

3. 运行结果

以爬取《大主宰》为例,截至至6月30号,其最新章节为第一千两百五十四章 最后的赢家,爬取其小说内容,保存为txt文件,测试结果如下:

4. 附录

你可以通过jslinxiaoli@foxmail.com联系我.
欢迎在github或者知乎上关注我 ^_^.
也可以访问个人网站: https://jslixiaolin.github.io

源代码如下:

package com.lxl.txt;import java.io.*;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** 爬取小说txt文件** @author lixiaolin* @createDate 2016-06-28 19:38*/
public class NovelGet {public static void main(String[] args) {String baseUrl = "http://www.00ksw.com/html/1/1343/";String nextUrl = "597361.html";String destFilePath = "D:\\test.txt";System.out.println("开始爬取数据...");long startTime = System.currentTimeMillis();getNovel(baseUrl, nextUrl, destFilePath);long endTime = System.currentTimeMillis();System.out.println("用时 " + (endTime - startTime) / 1000 + "秒...");}public static void getNovel(String baseUrl, String nextUrl, String destFilePath) {try {File destFile = new File(destFilePath);// 目标文件存在则删除if (!destFile.exists()) {destFile.delete();}destFile.createNewFile();FileWriter fw = new FileWriter(destFile);String realUrl, resultContent;StringBuffer sb = new StringBuffer();BufferedReader br = null;// 正文正则匹配表达式Pattern contentPat = Pattern.compile("<div id=\"content\">(.+?)</div>");// 标题正则表达式Pattern titlePat = Pattern.compile("readtitle = \"(.+?)\"");// 下一章正则表达式Pattern nextPat = Pattern.compile("&rarr; <a href=\"(.+?)\">");Matcher matcher;// 下一张的url以 / 开头则是最新章节while (!nextUrl.startsWith("/")) {realUrl = baseUrl + nextUrl;// 获取目标url的responsebr = new BufferedReader(new InputStreamReader(new URL(realUrl).openStream()));String line;while ((line = br.readLine()) != null) {sb.append(line);}// 替换空格和换行符resultContent = sb.toString().replaceAll("&nbsp;", "").replaceAll("<br /><br />", "*****");// 换行fw.write("\r\n\r\n");// 匹配标题matcher = titlePat.matcher(resultContent);if (matcher.find()) {fw.write(matcher.group(1));}fw.write("\r\n");// 匹配正文matcher = contentPat.matcher(resultContent);if (matcher.find()) {fw.write(matcher.group(1));}// 匹配下一页urlmatcher = nextPat.matcher(resultContent);if (matcher.find()) {nextUrl = matcher.group(1);}// 清空sb.delete(0, sb.length());}if (br != null) {br.close();}fw.close();} catch (IOException e) {e.printStackTrace();}}
}

java爬虫之下载txt小说相关推荐

  1. java爬虫小说网项目_java爬虫之下载txt小说

    最近迷上了天蚕土豆写的<大主宰>这本玄幻小说,无奈找不到下载链接.于是就萌生了自己爬取小说章节的想法,代码其实很简单,主要在于分析网页结构.正则匹配以及文件保存. 1. 分析网页结构 爬取 ...

  2. Java爬虫之下载全世界国家的国旗图片

    介绍   本篇博客将继续上一篇博客:Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗 的内容,将用Java来实现这个爬虫,下载全世界国家的国旗图片. ...

  3. 爬虫批量下载全站小说并自动保存

    目的是下载一个网站所有分类的小说,并且按照分类自动创建目录.根据小说名保存为txt文件. 一.抓取思路: 我的思路是百度一个小说网站,找到一本小说的章节页,使用requests.BeautifulSo ...

  4. BeautifulSoup编写PYTHON爬虫案例-下载名著小说

    爬虫背景 目的:爬取诗词名著网上的小说 网页:http://www.shicimingju.com/book/sanguoyanyi.html 分析过程: 1.查找当前页面多个章节的URL 2.打开每 ...

  5. Java爬虫之下载IMDB中Top250电影的图片

    介绍   在博客:Scrapy爬虫(4)爬取豆瓣电影Top250图片中我们利用Python的爬虫框架Scrapy,将豆瓣电影Top250图片下载到自己电脑上.那么,在Java的爬虫的也可以下载图片吗? ...

  6. java实现自动下载免费小说

    在百度上看到别人要下一些小说,就想自己写个下小说的玩玩. 以下为自己玩玩的,不必当真. package edu.uci.ics.crawler4j.test;import java.io.FileOu ...

  7. java爬虫抓取起点小说_爬虫实践-爬取起点中文网小说信息

    qidian.py: import xlwt import requests from lxml import etree import time all_info_list = [] def get ...

  8. java爬虫爬取笔趣阁小说

    java爬虫爬取笔趣阁小说 package novelCrawler;import org.jsoup.Connection; import org.jsoup.HttpStatusException ...

  9. python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载

    从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载Ehco 5 个月前 本来只是准备做一个爬起点小说名字的爬虫,后来想了一下,为啥不顺便把小说的内容也爬下来呢?于是我就写了这个 ...

最新文章

  1. block_dump观察Linux IO写入的具体文件(mysqld)
  2. 修Bug哪家强?谷歌:Linux,比我都修得好
  3. 数据库系统的体系结构知识笔记
  4. 访问控制模型ACL和RBAC
  5. Nacos笔记-对Nacos初步认识
  6. 以后可得记住了--Python笔试面试题小结
  7. 2天玩转单反相机引领快乐光影新生活
  8. Python 使用pip下载失败的解决方案
  9. 记一次勒索病毒攻击事件的处理过程
  10. Mac—Excel转图片
  11. html css动漫素材,66种特效的CSS3动画库animate.css
  12. 批量取消腾讯微博关注
  13. 计算机 网络 硬件包括,局域网网络硬件主要包括5个
  14. 沉浸其中,二次元高清图片
  15. BI神器Power Query(10)-- PQ从文件夹导入数据
  16. 学生类输入输出姓名学号
  17. (JAVA编成练习):递归的使用,简单的列子帮你理解递归。
  18. HBuildX的下载安装教程
  19. (二)Landsat_5 TM 遥感影像波段合成真假彩色影像
  20. 外包 | py2 下的 pickle 转成 py3 下的 pickle

热门文章

  1. 高中数学公式必背的50条秒杀技巧(学霸必备)
  2. python-selenium自动化测试网页
  3. 仿商城商品生成分享海报图片和识别图中二维码并跳转商品详情页
  4. Spring @Aspect简单使用
  5. IIS WEB进程中执行Dos命令失败的问题排查
  6. qq linux for android,腾讯QQ for android 糊弄还是敷衍?
  7. centos 7.6 安装Netbackup 9.1
  8. 《自己动手写嵌入式操作系统》阅读笔记之操作系统小知识
  9. 解决Android WebVIew中视频播放前出现的灰色三角形播放图标
  10. UE4之材质球UV缩放、偏移及旋转