现在的小说越来越难找了,一般都是在线的,费流量且收藏起来麻烦。
所以我觉得写一个整理器,从某些小说网站获取小说内容并保存为txt文件。
我们使用jsoup
它的maven描述为:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.2</version>
</dependency>
我们先找个小说网站,比如我们百度“思路客”,点击一个网站(http://www.siluwu.com)进去后,搜索 烟雨江南的“亵渎”
搜索好文章点进去后
这就是文章列表。
下面就开始分析和采集了
这里我们需要分析文章。
首先我们先获取小说的文章名,我们知道文章名是id为title的div
我们获取ID为title的内容。他的路径是"#title" 和jQuery很相似。
String xiaoshuoTitle = JsoupUtil.getElementString(doc, "#title");
下面我们来获取文章目录:
根据分析我们可以得知 文章在一个ID为list的层下面.
所以我们可以使用
Elements es = JsoupUtil.getElements(doc, "#list > dl > dd > a");
这样我们就可以获取所有的文章链接。
我们可是使用 e.attr("href") 来获取链接地址 使用 e.text() 来获取链接内容,也就是文章标题。
代码如下:
private static List<Article> getList(Document doc) throws IOException{
Elements es = JsoupUtil.getElements(doc, "#list > dl > dd > a");
List<Article> as = new ArrayList<Article>();
for(int i =0 ; i < es.size(); i++){
Article a = new Article();
Element e = es.get(i);
a.setLink(e.attr("href"));
a.setTitle(e.text());
as.add(a);
}
return as;
}
这样我们就可以拿到一个文章集合。下面就是去解析每篇文章的标题:
我们发现文章在一个ID为content的层里面。
所以我们可以通过 JsoupUtil.getElements(doc, "#content").first(); 来获取文章所在层。并且可以通过 html()方法来返回内容。
下面我们要做的就是将所有的html标签去除,并且将<br>替换为换行。
String content = getArticle(root_url+link);
content = content.replaceAll(" ", " ");
content = content.replaceAll("<br>", "\n");
content = content.replaceAll("\n+", "\n");
content = content.replaceAll("<[^>]+>", "");
content = content.replace("read_content_up();", "");
content = title+"\n"+content;
最后我们只需要将字符串拼接成为小说,并保存为txt文件。这样把txt导入到手机里 就是完整小说了。
项目附件在:http://www.idaima.com/a/194.html里