java爬虫之下载txt小说
最近迷上了天蚕土豆写的《大主宰》这本玄幻小说,无奈找不到下载链接。于是就萌生了自己爬取小说章节的想法,代码其实很简单,主要在于分析网页结构、正则匹配以及文件保存.
1. 分析网页结构
爬取小说主要需要爬取章节、正文,以及能保证爬取到所有的章节。以《大主宰》为例,其网页结构如下:
可以看到小说正文包含在一个id为content的div里,这极大的帮助了我们的爬取.章节名称保存在一个名为readtitle的js变量中.下一页的url位于a标签的href属性中
2. 正则匹配
通过分析网页结构,可以得到如下正则表达式:
* 章节名: readtitle = "(.+?)"
* 正文: <div id="content">(.+?)</div>
* 下一章:→ <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("→ <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(" ", "").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小说相关推荐
- java爬虫小说网项目_java爬虫之下载txt小说
最近迷上了天蚕土豆写的<大主宰>这本玄幻小说,无奈找不到下载链接.于是就萌生了自己爬取小说章节的想法,代码其实很简单,主要在于分析网页结构.正则匹配以及文件保存. 1. 分析网页结构 爬取 ...
- Java爬虫之下载全世界国家的国旗图片
介绍 本篇博客将继续上一篇博客:Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗 的内容,将用Java来实现这个爬虫,下载全世界国家的国旗图片. ...
- 爬虫批量下载全站小说并自动保存
目的是下载一个网站所有分类的小说,并且按照分类自动创建目录.根据小说名保存为txt文件. 一.抓取思路: 我的思路是百度一个小说网站,找到一本小说的章节页,使用requests.BeautifulSo ...
- BeautifulSoup编写PYTHON爬虫案例-下载名著小说
爬虫背景 目的:爬取诗词名著网上的小说 网页:http://www.shicimingju.com/book/sanguoyanyi.html 分析过程: 1.查找当前页面多个章节的URL 2.打开每 ...
- Java爬虫之下载IMDB中Top250电影的图片
介绍 在博客:Scrapy爬虫(4)爬取豆瓣电影Top250图片中我们利用Python的爬虫框架Scrapy,将豆瓣电影Top250图片下载到自己电脑上.那么,在Java的爬虫的也可以下载图片吗? ...
- java实现自动下载免费小说
在百度上看到别人要下一些小说,就想自己写个下小说的玩玩. 以下为自己玩玩的,不必当真. package edu.uci.ics.crawler4j.test;import java.io.FileOu ...
- java爬虫抓取起点小说_爬虫实践-爬取起点中文网小说信息
qidian.py: import xlwt import requests from lxml import etree import time all_info_list = [] def get ...
- java爬虫爬取笔趣阁小说
java爬虫爬取笔趣阁小说 package novelCrawler;import org.jsoup.Connection; import org.jsoup.HttpStatusException ...
- python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载
从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载Ehco 5 个月前 本来只是准备做一个爬起点小说名字的爬虫,后来想了一下,为啥不顺便把小说的内容也爬下来呢?于是我就写了这个 ...
最新文章
- block_dump观察Linux IO写入的具体文件(mysqld)
- 修Bug哪家强?谷歌:Linux,比我都修得好
- 数据库系统的体系结构知识笔记
- 访问控制模型ACL和RBAC
- Nacos笔记-对Nacos初步认识
- 以后可得记住了--Python笔试面试题小结
- 2天玩转单反相机引领快乐光影新生活
- Python 使用pip下载失败的解决方案
- 记一次勒索病毒攻击事件的处理过程
- Mac—Excel转图片
- html css动漫素材,66种特效的CSS3动画库animate.css
- 批量取消腾讯微博关注
- 计算机 网络 硬件包括,局域网网络硬件主要包括5个
- 沉浸其中,二次元高清图片
- BI神器Power Query(10)-- PQ从文件夹导入数据
- 学生类输入输出姓名学号
- (JAVA编成练习):递归的使用,简单的列子帮你理解递归。
- HBuildX的下载安装教程
- (二)Landsat_5 TM 遥感影像波段合成真假彩色影像
- 外包 | py2 下的 pickle 转成 py3 下的 pickle
热门文章
- 高中数学公式必背的50条秒杀技巧(学霸必备)
- python-selenium自动化测试网页
- 仿商城商品生成分享海报图片和识别图中二维码并跳转商品详情页
- Spring @Aspect简单使用
- IIS WEB进程中执行Dos命令失败的问题排查
- qq linux for android,腾讯QQ for android 糊弄还是敷衍?
- centos 7.6 安装Netbackup 9.1
- 《自己动手写嵌入式操作系统》阅读笔记之操作系统小知识
- 解决Android WebVIew中视频播放前出现的灰色三角形播放图标
- UE4之材质球UV缩放、偏移及旋转