有时想看一本小说结果找下载的地方浪费很多时间,就想自己写一个爬小说的程序出来,写前看了几个别人写的小说爬虫,给了很多启发,所以发在这里希望能帮到需要的人。
1、version 1.0(只能爬一个小说)
1.1、小说网页
http://www.kanshuge.la/files/article/html/15/15876/2769913.html
1.2、需要的几个元素\标签
通过这个获取下一页的地址和章节信息。因此得到第一个article类。
package com.domain;
public class Article {
private String title;//章节名
private String content;//内容
private String nextUrl;//下一章url
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getNextUrl() {
return nextUrl;
}
public void setNextUrl(String nextUrl) {
this.nextUrl = nextUrl;
}
}
获取文本text,类dom查找可以通过第一个和第三个div标签的任意一个,然后查找子元素查找
document.select("div[id="BookText"]")
docuemnt.select("div.ad250left")
1.3、获取html文档的根节点
package com.utli;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/*
*通过url获取html页面信息。
*/
public class GetDocument {
public static Document getDocument(String nextUrl) throws IOException {
Document doc=null;
doc=Jsoup.connect(nextUrl).get();
return doc;
}
}
1.4、需要用的的utils
package com.utli;
import java.io.IOException;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class GetNote {
static String baseUrl="http://www.kanshuge.la/files/article/html/143/143969/";
//获取nexturl
public static String getNextUrl(Document document) throws IOException {
org.jsoup.select.Elements elements=document.select("a[href]");
String s,nextUrl = null;
for(Element element:elements){
if ("下一页".equals(element.text())) {//element.text()!=null&&
s=element.attr("href");
if (s.equals("index.html")) {
return "0";
}
nextUrl=baseUrl+s;
}
}
return nextUrl;
}
//获取content
public static String getContent(Document document) {
String string=document.select("h1").text();
return string.substring(string.indexOf("第"));
}
//获取文本内容
public static String getText(Document document) throws IOException {
String list=" ";
Element element=document.getElementById("BookText");
String[] s=element.text().split(" ");
for(String l:s){
list+=l+"\r\n ";
}
return list;
}
}
1.5、最后一个main
package com.main;
/*
* 一个单线程简易的小说爬虫。
*
*/
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;