网上的一些小说是可以直接看的,不需要登陆与购买,现在我们需要做的就是把这些小说的内容下载到本地。

首先,准备工作:
下载JSoup的jar包,并且创建一个新的工程。

接下来在浏览器上找到需要下载的小说:

这是有正文的界面,然后复制链接,作为爬取的初始链接
代码如下:

/*** 获取链接的document对象* @param url* @return document*/public static Document getDoc(String url){boolean flag = false;Document document = null;do{try {document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31").timeout(5000).get();flag = false;} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();flag = true;}}while(flag);return document;}

在主函数中进行调用:

        String url = "http://www.biquge5200.com/31_31746/12331189.html";Document document = getDoc(url);

然后进行获取此链接的document对象,并使用toString方法输出:

在上面的图片中可以看到,title就是本章的题目。
然后找到本章的正文:

在id等于content的div中是正文,所以在获取到正文后,进行提取:

        String title = document.title();String text = document.select("#content").text();System.out.println(title);System.out.println(text);//System.out.println(document.toString());

效果如下:

发现格式有问题,这个不用管,在最后存储到文件中会进行正确的转化,而且手机或者一些文本阅读软件有自动排版功能,所以格式不用考虑。

接下来,我们需要找到下一章的链接:

发现是class为bottem2的div块:
首先我们得到这个div块:
主函数添加:

        Elements nextdiv = document.select(".bottem2");System.out.println(nextdiv.toString());

效果如下:

接下来我们需要获取下一章的地址:
发现下一章和右箭头之间的就是链接,不能先获取所有的a标签然后去第4个,容易出错。
首先,使用String的split方法截取下一章之前的内容:
主函数:

        String nextdivstr = nextdiv.toString();String[] nexturl = nextdivstr.split("下一章");

调试发现:

整个字符串在下一章被分为两段,我们只需要之前的那一段,所以只取第一个元素:
然后右箭头的unicode编码为2192:

        nextdivstr = nexturl[0];nexturl = nextdivstr.split("\u2192");

调试后发现:

在第二个元素是我们需要的:

        next = nexturl[1];System.out.println(next);


然后发现红框中的内容不需要,所以我们需要去掉:

        next = next.substring(12,next.length() - 2);

效果如下:

接下来就是使用循环进行爬取了:
我们查看目录发现这个小说共有1739章:

所以我们把数量限定在1739章上:

    public static void main(String[] args) {String url = "http://www.biquge5200.com/31_31746/12331189.html";int i = 0;while (i < 1739) {Document document = getDoc(url);String title = document.title();String text = document.select("#content").text();Elements nextdiv = document.select(".bottem2");String next = nextdiv.toString();String[] nexturl = next.split("下一章");next = nexturl[0];nexturl = next.split("\u2192");next = nexturl[1];next = next.substring(12, next.length() - 2);i++;}}

这样就获取到了所有的章节,然后就是保存在本地了:
首先在某个路径下创建一个txt文件:

File file = new File("E:\\寒门状元.txt");

然后创建一个文件写入对象:

        FileWriter fileWriter = null;try {fileWriter = new FileWriter(file);} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}

然后每获取到一章,就写入一章:

            try {fileWriter.write(title);fileWriter.write(text);} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}

最后,每一次写入后刷新缓冲:

            try {fileWriter.flush();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}

当所有的章节全部获取完成后,关闭文件写入对象:

        try {fileWriter.close();} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}

这样就算完成了,但是我们不知道进度,所以,添加输出提示:

System.out.println("第"+(i+1)+"完成,共1739章");

所有的到这里就完了:
测试一下:

发现因为爬取太快,所以出现503错误(我自己猜测),但是不影响程序的运行:

还能继续爬取,如果觉得错误信息烦人,就把获取链接的错误提示注释,就没有了。

总结一下,网络爬虫的难点主要有两个:
1.获得链接的内容。
在这里容易出错的地方是获取链接容易出现403,404,502,503等一些错误。
这种错误出现了,网上随便一搜,解决方法还是挺多的。
2.就是如何获得下一个链接。
这是让自己的爬虫动起来的关键所在,有些页面可以利用JQuery的选择器表达式直接获取,比如attr方法获取到a标签的href这个属性,等等,但是容易出错。
所以这个方法看起来很笨,但是是一个通用的方法。理解上比较容易,对于没有前端知识的人比较适用。把前端知识转化为从字符串中提取字符串的问题。

基于JSoup的网络爬虫爬取小说内容相关推荐

  1. 基于Jsoup的Java爬虫-爬取必应壁纸网站的壁纸(Java静态壁纸爬虫实例)

    准备阶段 1.必应壁纸网站:https://bing.ioliu.cn(爬取对象网站) 2.Jsoup包下载地址:https://jsoup.org/download(以下代码需要用到该包,记得导入包 ...

  2. 基于Python的网络爬虫爬取天气数据可视化分析

    目录 摘 要 1 一. 设计目的 2 二. 设计任务内容 3 三. 常用爬虫框架比较 3 四.网络爬虫程序总体设计 3 四. 网络爬虫程序详细设计 4 4.1设计环境和目标分析 4 4.2爬虫运行流程 ...

  3. 基于jsoup的java爬虫-爬取豆瓣小组租房信息

    主要框架为springboot+mybatis+jsoup jsoup官方文档:https://www.open-open.com/jsoup/ 爬取的豆瓣网址为:https://www.douban ...

  4. C#网络爬虫抓取小说

    C#网络爬虫抓取小说 2017-09-05DotNet (点击上方蓝字,可快速关注我们) 来源:苍 cnblogs.com/cang12138/p/7464226.html 阅读目录 1.分析html ...

  5. python网络爬虫_Python网络爬虫——爬取视频网站源视频!

    原标题:Python网络爬虫--爬取视频网站源视频! 学习前提 1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 ...

  6. python如何爬虫网页数据-python网络爬虫爬取网页内容

    1.什么是网络爬虫? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自 ...

  7. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  8. python朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  9. python抓取朋友圈动态_如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)...

    原标题:如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下) 前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往 ...

  10. python爬去新浪微博_Python爬虫爬取新浪微博内容示例【基于代理IP】

    Python爬虫爬取新浪微博内容示例[基于代理IP] 发布时间:2020-09-07 10:08:14 来源:脚本之家 阅读:120 本文实例讲述了Python爬虫爬取新浪微博内容.分享给大家供大家参 ...

最新文章

  1. linux 命令02
  2. python条件语句函数_python sum 函数中可以使用条件语句吗
  3. 通过Spring Data Neo4J操作您的图形数据库
  4. Android-support-v4源码查看
  5. c语言找到串口,再次熟悉串口
  6. 阿根廷点杀荷兰,24年后再进决赛
  7. AngularJs+bootstrap搭载前台框架——基础页面
  8. 实现JNI的另一种方法:使用RegisterNatives方法传递和使用Java自定义类 (转)
  9. CTF 栅栏加密解密----python代码实现
  10. 地球上第一款测身高的安卓手机应用——AR 测身高
  11. Java | PTA练习:Employee类的层级结构
  12. MySQL-SQL注入,导入,导出
  13. java 统计阅读量_使用redis实现【统计文章阅读量】及【最热文章】功能
  14. sa-token使用
  15. 墨尔本大学计算机硕士gpa,2020年去墨尔本大学读硕士gpa成绩要求是多少?各专业入学要求汇总...
  16. 从服务业突然决定转行进入IT界
  17. 桌宠必须要java吗_桌宠软件电脑版下载_桌面宠物软件免费版下载_3DM软件
  18. 九个角度分析对比 Android、iOS开发区别
  19. Winsows Server 2019 安装 PostgreSQL
  20. 基于springboot的校园闲置图书共享平台

热门文章

  1. 通天塔导游:各种编程语言优缺点
  2. Android 显示历史搜索记录
  3. VTCP QIO技术解析
  4. Linux运维工程师常见面试题(一)
  5. Python3之数据结构
  6. 生日祝福html_祝我家的猪,生日快乐 | 告白墙第21期
  7. winform的RichTextBox设置网格线,类似word的稿纸效果
  8. 2022年最新版Android安卓面试题+答案精选(每日20题,持续更新中)【八】
  9. 检查网络是否畅通的四个步骤
  10. [转]Android 上百实例源码分析以及开源分析