因CSDN版权问题,小说网站的URL、图片不可在此公布,读者根据自己想要爬取的网站,自行选择网站即可。

1.爬取小说章节内容,需要注意的大部分原创小说内容页是禁用右键的,无法直接选取页面内容进行元素检查,需要按F12,从上往下逐步选取元素。
2.利用IO流,将爬取的内容保存到本地文本文件。
本练习循序渐进,Demo1、首先爬取某一章节小说内容,Demo2、爬取完整一本小说内容,Demo3、爬取首页推荐榜中所有作品内容。
在项目中添加HttpClient、Jsoup依赖,参见本系列上两章。

Demo1:爬取某一章节小说内容

public static void main(String[] args) throws IOException {//小说第一章URL,因版权问题,url屏蔽,读者可自行选择String url = "https://xxx.xxxx.xxxx/xxxxx";Connection connect = Jsoup.connect(url);Document document = connect.get();//经F12分析,章节的标题、内容组合选择器如下所示Elements title = document.select("#j_chapterBox .text-wrap  .main-text-wrap .text-head h3 .content-wrap");Elements content = document.select("#j_chapterBox .text-wrap  .main-text-wrap .read-content p");//利用IO流将小说章节内容保存到本地FileWriter fw = new FileWriter("d:/test/abc.txt");fw.write(title.text() + "\r\n");for (Element e : content) {fw.write(e.text() + "\r\n");}fw.close();
}

Demo2、爬取完整一本小说内容

本Demo的思路是根据读取每章节的标题、内容,并读取“下一章”超链接中的href,以便发起网络请求爬取下一章内容。利用循环,即可实现自动爬取一本小说的内容。并爬取出本页面所显示的书名作为文件名。

这里注意,本Demo使用HttpClient做网络连接,Jsoup做内容解析,这是因为Jsoup虽然也可以进行网络连接,但是它存在的目的更是为了做HTML解析,它的网络连接方面的处理功能比之HTTPClient不可同日而语。在本Demo中,因为要不断的根据“下一章的”按钮,去发起新的网络请求,所以让适合的技术干适合的事情就势在必行了。

public static void main(String[] args) throws IOException {//小说第一章URL,因版权问题,url屏蔽,读者可自行选择String url = "https://xxx.xxxx.xxxx/xxxxx";;Document document = Jsoup.connect(url).get();Elements bookName = document.select("#j_textWrap .read-container .book-cover-wrap h1");//建立文件输出流,保存文本文件,以小说名作为文件名FileWriter fw = new FileWriter("d:/test/"+bookName.text()+".txt");//通过HttpClients工具类创建一个httpClient对象,该用来发起HTTP请求CloseableHttpClient httpClient = HttpClients.createDefault();while(true) {//创建一个“HTTP请求方法为Get”的一个对象HttpGet httpGet = new HttpGet(url);//通过httpClient发其Http请求,得到Http响应CloseableHttpResponse response = httpClient.execute(httpGet);//处理响应//如果响应状态码是200,表示访问的网页是正常的if (response.getStatusLine().getStatusCode() == 200) {//拿到响应内容HttpEntity entity = response.getEntity();//将内容转换成StringString html = EntityUtils.toString(entity, "UTF-8");//由Jsoup解析由HttpClient获取的HTML文档document = Jsoup.parse(html);//Jsoup通过id、class、标签,解析HTML文档,拿到我们业务上想要的数据Elements title = document.select("#j_chapterBox .text-wrap .main-text-wrap .text-head h3 .content-wrap");Elements content = document.select("#j_chapterBox .text-wrap .main-text-wrap .read-content p");//解析“下一章”按钮,得到下一章的URLElements next = document.select("#j_chapterNext");String href = next.attr("href");String prefix = "https:";url = prefix + href;        //如果爬取不到内容,说明本书已爬完最后一章,结束if(url.equals("https:")){break;}fw.write(title.text()+"\r\n");for (Element e : content) {fw.write(e.text()+"\r\n");}}}fw.close();
}

Demo3、爬取首页推荐榜中所有作品内容
本次爬取首页强推榜所有书籍。

点击强推榜单中的书籍超链接,会进入如下图所示的书籍首页。点击书籍的免费试读,可以进入到如Demo1、Demo2中的小说第一章的URL。

分析首页强推榜HTML代码、免费试读按钮代码,得出思路如下:
1.访问首页,解析强推榜中所有书籍
2.利用循环进入强推榜列表中所有书籍的主页
3.在书籍主页中,通过解析“免费试读”按钮,进入到第一章URL
4.根据Demo2中的读取完整一本小说内容,整合实现本Demo

代码如下:

    public static void main(String[] args) throws IOException {Document document = null;String prefix = "https:";//小说网站首页,url屏蔽,读者可自行选择String url = "https://xxx.xxxx.xxxx/";CloseableHttpClient httpClient = HttpClients.createDefault();//访问小说网首页HttpGet httpGet = new HttpGet(url);CloseableHttpResponse response = httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() == 200) {HttpEntity entity = response.getEntity();String html = EntityUtils.toString(entity, "UTF-8");document = Jsoup.parse(html);//解析推榜单,得到书籍标题和hrefElements books = document.select(".wrap .index-two-wrap .book-list-wrap .book-list ul li strong a");for (Element book : books) {url = prefix + book.attr("href");//进入书籍主页httpGet = new HttpGet(url);response = httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() == 200) {entity = response.getEntity();html = EntityUtils.toString(entity, "UTF-8");document = Jsoup.parse(html);//解析书籍主页中的“免费阅读”按钮,得到书籍第一章的URLurl =prefix+ document.select("#readBtn").attr("href");//根据强推榜中的书籍标题,通过IO流,为每一本小说创建文件名FileWriter fw = new FileWriter("d:/test/" + book.text() + ".txt");//循环读取每一章节的内容,并使用IO流存储到对应的文件中while (true) {httpGet = new HttpGet(url);response = httpClient.execute(httpGet);if (response.getStatusLine().getStatusCode() == 200) {entity = response.getEntity();//将内容转换成Stringhtml = EntityUtils.toString(entity, "UTF-8");document = Jsoup.parse(html);Elements title = document.select("#j_chapterBox .text-wrap .main-text-wrap .text-head h3 .content-wrap");Elements content = document.select("#j_chapterBox .text-wrap .main-text-wrap .read-content p");Elements next = document.select("#j_chapterNext");String href = next.attr("href");url = prefix + href;if (url.equals("https:")) {break;}fw.write(title.text() + "\r\n");for (Element e : content) {fw.write(e.text() + "\r\n");}}}fw.close();}}}}```

Java网络爬虫(三)爬取网络小说相关推荐

  1. 【网络爬虫】爬取网络小说并保存为txt

    爬虫爬取网络小说并保存为txt文件 最近突然想看小说,但是苦于无法下载为txt,于是秉持着"自己动手,丰衣足食"的原则,自己写了一个爬虫,仅供参考~ 这里就以火星引力的<逆天 ...

  2. 初识Python爬虫----如何爬取网络数据

    一.什么是网络爬虫 即爬取网络数据的虫子,也就是Python程序. 二.爬虫的实质是什么? 模拟浏览器的工作原理,向服务器发送请求数据. 三.浏览器的工作原理是什么? 浏览器还可以起到翻译数据的作用. ...

  3. python爬虫下载小说_用PYTHON爬虫简单爬取网络小说

    用PYTHON爬虫简单爬取网络小说. 这里是17K小说网上,随便找了一本小说,名字是<千万大奖>. 里面主要是三个函数: 1.get_download_url() 用于获取该小说的所有章节 ...

  4. 基于Java的网络爬虫实现抓取网络小说(一)

    基于Java的网络爬虫实现抓取网络小说(一) 今天开始写点东西,一方面加深印象一方面再学习. 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用 ...

  5. 用PYTHON爬虫简单爬取网络小说

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  6. Python爬虫之爬取网络小说并在本地保存为txt文件

    Python爬虫之爬取网络小说并在本地保存为txt文件 注:本文使用软件为Sublime Text,浏览器为谷歌浏览器 (新手小白第一次写,写得不好请见谅) **1.**首先找到想要爬取的小说章节目录 ...

  7. python 爬虫热搜_Python网络爬虫之爬取微博热搜

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 1.分析网页的源代码:右键--查看网页源代码. 从网页代码中可以获取到信息 (1)热搜的名字都在 的子节点里 (2)热搜的排名都在 ...

  8. lofter 爬虫_Python网络爬虫1 - 爬取网易LOFTER图片

    LOFTER是网易出品的优质轻博客,灵感源于国外的tumblr,但比之更加文艺,更加本地化.本人非常喜欢LOFTER的UI设计,以及其中的优质用户和内容,似乎网易并不擅长推广,所以受众并不广泛.这都是 ...

  9. python爬虫微博热搜_Python网络爬虫之爬取微博热搜

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 url= https://s.weibo.com/top/summary?Refer=top_hot&topnav=1&am ...

  10. python古诗默写_Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索

    Python网络爬虫:爬取古诗文中的某个制定诗句来实现搜索 发布时间:2020-07-20 23:48:19 来源:51CTO 阅读:883 python编译练习,为了将自己学习过的知识用上,自己找了 ...

最新文章

  1. 在linux下配置oracle的远程访问
  2. php kuozhan
  3. 用Python实现一个简单的智能换脸软件
  4. linux dev urandom,Linux random vs urandom 区别
  5. windows XP下DCOM的权限配置
  6. 塑料封装可靠性问题浅析
  7. 学习Spring Boot:(四)应用日志
  8. 关于C语言数据类型的PPT,C语言基本的数据类型.ppt
  9. Docker学习总结(31)——使用Maven插件构建docker镜像
  10. php 网页解析错误,php-解析错误:语法错误,文件意外结束
  11. [SCOI2009]围豆豆
  12. MFC按方向键旋转立方体线框
  13. dbt2 mysql_DBT2 Benchmark Tool (mysql压力测试工具) V0.37.50.14
  14. win7亮度怎么调_win7设置双屏显示的方法
  15. 谁来PK“baidu局域网”
  16. uni-app 微信小程序全局配置分享好友、朋友圈...
  17. 搭建基于 Vim 的 C++和 Python 开发环境[持续更新]
  18. Javascript 操作 SharePoint media web part
  19. php-ews发送邮件,node.js 基于 STMP 协议和 EWS 协议发送邮件
  20. 2.2 单片机最小系统

热门文章

  1. java游戏开发杂谈 - 游戏编程浅析
  2. Keil系列软件安装(二)Keil5 MDk
  3. VBoxManager很强大哈!
  4. python实现名片管理器
  5. cinder卷删除不掉解决方法
  6. 彩信拦截之突破360的小篱笆
  7. Python:strip() 函数
  8. 5G uRLLC技术及其与TSN的融合
  9. java 苹果vcf解析,VCF格式解析 | Public Library of Bioinformatics
  10. 远程桌面,openGL