jsoup爬取网站信息之《冰与火之歌》
使用jsoup爬取了下某个网站中的《冰与火之歌》信息,并将格式保存成了json格式到文本文件中。
具体执行的代码如下:
public static void main(String[] args) throws IOException {TestJsoupBingYuHuo tj = new TestJsoupBingYuHuo();tj.test();}static String urlPath = "http://www.bingyuhuozhige.cc";static String srcPath = "D:\\study\\jsoup\\bingyuhuozhige\\";static boolean writeOnOff = true;public void test() throws IOException {Document document = JsoupUtils.getRoot(urlPath);Elements h3lists = document.select("h3");this.analysisH3List(h3lists);}// 解析册信息private JSONArray analysisH3List(Elements h3List) throws IOException {int n = 0;for (Element h3 : h3List) {n++;if (n < 7) { //改变这里的数字,可以设置从第几册开始跑continue;}// h3 是册名String h3Text = h3.text().trim();System.out.println(h3Text);if(writeOnOff) {FileUtils.createDir(srcPath + h3Text); // 创建册目录}// p 是册的描述Element p = this.analysisPList(h3, srcPath + h3Text);// 解析册的描述,并存储到册对应目录下的文件中// div class = row 内的 links 是每个章节的首页this.analysisFirstPageLink(p, srcPath + h3Text);}return null;}// 解析 册的描述private Element analysisPList(Element h3, String path) {Element p = null;while (p == null || !p.tagName().equals("p")) {if (p != null) {p = p.nextElementSibling();} else {p = h3.nextElementSibling();}System.out.println("=");}String pText = p.text().trim();System.out.println(pText);if(writeOnOff) { FileUtils.writeLine(path + File.separator + "简述", pText);}return p;}// 解析每章的首页urlprivate JSONArray analysisFirstPageLink(Element p, String path) throws IOException {Element divRow = null;while (divRow == null || !divRow.tagName().equals("div") || !divRow.hasClass("row")) {if (divRow != null) {divRow = divRow.nextElementSibling();} else {divRow = p.nextElementSibling();}System.out.println("=");}Elements links = divRow.select("a[href]");for (Element link : links) {String url = link.attr("href").trim();String title = link.attr("title").trim();// 为每个 title 创建一个 文本title = title.startsWith("第六十一章 狮鹫的重生") ? "第六十一章 狮鹫的重生(格里夫·琼恩·克林顿)" : title;if(writeOnOff) { FileUtils.writeLine(path + File.separator + title + ".txt", title);}System.out.println(title + " = " + url);this.analysisAllPagesLink(url, path + File.separator + title + ".txt");//进行下一步,解析每个章节所有页面的链接,并获取每页的文本内容}return null;}// 解析 每章 首页,获取到每个章节的所有页链接 ,并获取每页的文本内容// 记得要做 睡眠处理,避免因网络延时出错private void analysisAllPagesLink(String firstPageUrl, String path) throws IOException {try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}Document document = JsoupUtils.getRoot(urlPath + firstPageUrl);Elements paginations = document.select("div.pagination");Element pagination = paginations.get(0);Elements links = pagination.select("a[href]");if(links.size() > 0) {int lastNum = 2;for (Element link : links) {String title = link.text().trim(); if("尾页".equals(title)) {String url = link.attr("href").trim();lastNum = Integer.parseInt(url.substring(url.indexOf("_") + 1, url.indexOf(".html")));}}//解析每页的内容,把内容写到文件中this.analysisPageText(document, path);String urlPrefix = firstPageUrl.substring(0, firstPageUrl.indexOf(".html"));for(int i = 2 ; i <= lastNum ; i ++) {//解析每页的内容,把内容写到文件中this.analysisPageText(urlPath + urlPrefix + "_" + i + ".html", path);System.out.println(i);}}else {//解析每页的内容,把内容写到文件中this.analysisPageText(document, path);}}private void analysisPageText(String pageUrl, String path) throws IOException {try {Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();}Document document = JsoupUtils.getRoot(pageUrl);this.analysisPageText(document, path);}private void analysisPageText(Document document, String path) {Elements span9s = document.select("div.span9");if(span9s.size() < 1) {span9s = document.select("div.span12");}Element span9 = span9s.get(0);String text = span9.html();text = text.substring(0, text.indexOf("<div class=\"pagination\""));
// System.out.println(text);int begin = text.lastIndexOf("</div>") + 6;text = text.substring(begin);text = text.replaceAll("<br>", "\n\r").replaceAll("<p>", "\n\r").replaceAll("</p>", "\n\r");if(writeOnOff) { FileUtils.writeLine(path, text);}}
代码中确实的其它jar包信息和工具类,见我的另一篇文章,链接如下:
jsoup爬取网站信息之《本草纲目》
jsoup爬取网站信息之《冰与火之歌》相关推荐
- 使用Jsoup爬取网站信息(以天猫为例)
http://download.csdn.net/detail/lostchris/9432552 上面是案例... 过年的时候一直想弄点网络爬虫好为今年毕业论文提供数据准备... 楼主先后试过htt ...
- 使用Python和selenium的Chromedriver模拟登陆爬取网站信息(beautifulsoup)
爬取的信息很多,所以需要设置断点,在程序重启时能继续爬取.并且能在断掉之后自动重启. 1.setting.py 对爬取的常量进行设置 """ 基本信息设置 "& ...
- 基于java使用jsoup爬取网站投票数据的demo
想爬取一个投票网站的实时数据 获取姓名和票数 查看网站源码(这里只展示一部分) <table border="0" cellpadding="0" cel ...
- 爬虫简单爬取网站信息
首先打开想要爬取的网站,找到想要爬取的内容 开始编写代码: 引入需要的模块 import os #引入系统模块 from bs4 import BeautifulSoup # 网页解析,获取数据 im ...
- 手把手教你爬取网站信息
如题,理解这一部分需要一定的Python基础,有些代码我不做详细解释了,但是用这个方法是确实可以爬到的. 此次用以下这个页面(可以用md5软件解密) 1476409DEDD7A55FE86915BC3 ...
- HtmlUnit、httpclient、jsoup爬取网页信息并解析
转载:http://tianxingzhe.blog.51cto.com/3390077/1755511 转载于:https://www.cnblogs.com/puhongtao/p/7063563 ...
- 利用Jsoup爬取网页内容
jsoup的强大之处在这里就不多说,最近在写项目,需要爬取网页上的内容,自然想到的是利用Jsoup来处理,项目中是利用Jsoup爬取学校信息门户的新闻消息,然后放进客户端 网页的html代码如下 &l ...
- Jmeter+ForEach控制器+BeanShell取样器+BeanShell PostProcessor爬取网站信息储存csv
1.正则提取器+ForEach控制器+BeanShell PostProcessor+BeanShell 取样器,爬取网站信息并写入到csv中 2.访问网站设置 3.正则提取设置,匹配数字-1代表提取 ...
- python爬虫爬取房源信息
目录 一.数据获取与预处理 二.csv文件的保存 三.数据库存储 四.爬虫完整代码 五.数据库存储完整代码 写这篇博客的原因是在我爬取房产这类数据信息的时候,发现csdn中好多博主写的关于此类的文 ...
最新文章
- 两下或多下回车造成数据库多次提交事物的解决方法
- Pytorch的安装教程
- “adb不是内部或外部命令,也不是可执行的应用程序”错误原因及解决方法
- WebService的两种方式SOAP和REST比较
- Linux查看系统位数命令
- Android 4.1最终版SDK和ADT Plugin全线发布
- mysqlsla安装与慢查询分析
- 当时间管理碰上大数据,从此,悠悠时光也终不再那么漫长
- Teradata在中国银行业的应用简介
- 阿里云服务器ip:端口号无法访问
- easyui datalist 不显示数据_爬虫练习——豆瓣电影信息爬取及数据可视化
- Ubuntu 右键打开终端
- 字符串缓冲区和字符串构造器
- 四.单纯形法(两阶段和大M法)
- js如何删除数组第一个和最后一个元素
- 1.9w粉丝带动近100w播放量,推广黑马不止一位
- VA_LIST可变参数列表的使用方法与原理
- 哲学生活中必背的哲学原理
- 微信小程序中如何发送客服消息给用户
- Python搭建简单的web服务器