小说爬虫之JAVA代码的实现(附代码)

第1次采取Markdown看看效果。

  • 思路:首先找到1篇小说,获得第1章小说的URL,然后根据该URL来获得该章小说的标题、内容和下1章的URL。以后重复类似动作,就可以获得到整篇小说的内容了。

  • 实现方法:这里语言采取==Java==,使用了jsoup。jsoup简单的使用方法可以参考这里。

  • 实现进程:首先找到1篇小说,这里以“神墓”为例,我们打开第1章,然后查看网页源代码。
    在源码中我们可以看到下1页的url、文章标题和小说内容。我们可以先获得1个Document对象,然后分别根据Element的Id或样式来获得小说的内容、标题或下1页URL。

    1. 小说中的下1页地址
      下一页
    2. 小说的标题
      小说标题
    3. 小说的内容
      小说内容
    4. 小说的下1页地址也能够从这里获得
      其他
  • 实现代码:新建1个项目spider,导入jsoup⑴.7.3.jar包。

    1. 新建com.dapeng.bean包,在该包下新建类Article。其主要代码以下:
package com.dapeng.bean;

public class Article {

private String id;//id
private String title;//标题
private String content;//内容
private String url;//当前章节url
private String nextUrl;//下1章url
/**
*省略getter、setter方法
*/

@Override
public String toString() {
return "Article [id=" + id + ", title=" + title + ", content="
+ content + ", url=" + url + ", nextUrl=" + nextUrl + "]";
}
}

2.新建com.dapeng.method包,在该包下新建UtilMethod类。主要用于实现获得文章标题、内容、下1章URL等方法。其代码以下:

package com.dapeng.method;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import com.dapeng.bean.Article;

public class UtilMethod {

/**
* 根据url获得Document对象
* @param url 小说章节url
* @return Document对象
*/

public static Document getDocument(String url){
Document doc = null;
try {
doc = Jsoup.connect(url).timeout(5000).get();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return doc;
}
/**
* 根据获得的Document对象找到章节标题
* @param doc
* @return 标题
*/

public static String getTitle(Document doc){
return doc.getElementById("title").text();
}

/**
* 根据获得的Document对象找到小说内容
* @param doc
* @return 内容
*/

public static String getContent(Document doc){
if(doc.getElementById("content") != null){
return doc.getElementById("content").text();
}else{
return null;
}

}
/**
* 根据获得的Document对象找到下1章的Url地址
* @param doc
* @return 下1章Url
*/

public static String getNextUrl(Document doc){
Element ul = doc.select("ul").first();
String regex = "<li><a href="(.*?)">下1页</a></li>";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(ul.toString());
Document nextDoc = null;
if (matcher.find()) {
nextDoc = Jsoup.parse(matcher.group());
Element href = nextDoc.select("a").first();
return "http://www.bxwx.org/b/5/5131/" + href.attr("href");
}else{
return null;
}

}

/**
* 根据url获得id
* @param url
* @return id
*/

public static String getId(String url){
String urlSpilts[] = url.split("/");
return (urlSpilts[urlSpilts.length - 1]).split(".")[0];
}

/**
* 根据小说的Url获得1个Article对象
* @param url
* @return
*/

public static Article getArticle(String url){
Article article = new Article();
article.setUrl(url);
Document doc = getDocument(url);
article.setId(getId(url));
article.setTitle(getTitle(doc));
article.setNextUrl(getNextUrl(doc));
article.setContent(getContent(doc));
return article;
}

}

3.新建com.dapeng.test包,用于测试获得整篇小说。新建GetArticles类。其代码以下:

package com.dapeng.test;

import com.dapeng.bean.Article;
import com.dapeng.method.UtilMethod;

public class GetArticles {

/**
* @param args
*/

public static void main(String[] args) {
// TODO Auto-generated method stub

String firstUrl = "http://www.bxwx.org/b/5/5131/832882.html";
Article article = UtilMethod.getArticle(firstUrl);
while(article.getNextUrl() != null && article.getContent() != null && !article.getId().equals("996627")){
article = UtilMethod.getArticle(article.getNextUrl());
System.out.println(article.getId()+"----"+article.getTitle());
}
}

}

运行GetArticles方法,可以看到类似以下的效果:

832883----第1卷 从神墓中走出 第2章 沧海桑田
832884----第1卷 从神墓中走出 第3章 人世悠悠
832885----第1卷 从神墓中走出 第4章 无解之谜
832886----第1卷 从神墓中走出 第5章 冷艳
832887----第1卷 从神墓中走出 第6章 公主
832888----第1卷 从神墓中走出 第7章 小恶魔
832889----第1卷 从神墓中走出 第8章 烈火仙莲
832890----第1卷 从神墓中走出 第9章 百丈巨蛇
....

到这里该代码就告1段落了。后续的就不再进行了,比如说将小说插入数据库,然后自己搭建1个小说站点,或将小说写入到1个txt文档中,不用再看那烦人的广告了。等等。。这里就不再进行了。

最后代码附上。

波比源码 – 精品源码模版分享 | www.bobi11.com
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

波比源码 » 小说爬虫之JAVA代码的实现(附代码)

发表评论

Hi, 如果你对这款模板有疑问,可以跟我联系哦!

联系站长
赞助VIP 享更多特权,建议使用 QQ 登录
喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡