原文地址:http://www.blogjava.net/youxia/archive/2008/11/07/239310.html
各位朋友,等人等车等吃饭的时候可以干些什么呢?掏出手机看电子书是不错的选择。昨天,我写了一个小程序,基本上可以把新浪读书频道排行榜一网打尽。
程序只用到了Java中的这样一些知识:
1、URL类,用来连接新浪网
2、BufferedReader类,用来读取数据
3、Pattern类和Matcher类,使用正则表达式来提取小说的正文
完整的代码如下:
/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packageebookdownloaderforsinanzt;
importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.net.URL;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
/**
*
*@author海边沫沫
*/
publicclassMain{
/**
*@paramargsthecommandlinearguments
*/
publicstaticvoidmain(String[]args){
intupbound=Integer.parseInt(args[1]);
for(inti=1;i<=upbound;i++){
System.out.println(getParagraph("http://book.sina.com.cn/nzt/lit/"+args[0]+"/",i));
System.out.println();
}
}
privatestaticStringgetParagraph(Stringurl,intindex){
intstatus=0;
Stringparagraph="";
try{
URLebook=newURL(url+index+".shtml");
BufferedReaderreader=newBufferedReader(newInputStreamReader(ebook.openStream()));
Stringline;
while((line=reader.readLine())!=null){
if(status==0){
//还没有碰到标题
Patternpattern=Pattern.compile("(.*)<tr><tdclass=title14align=center><fontcolor=red><B>(.*)</B></font></td></tr>(.*)");
Matchermatcher=pattern.matcher(line);
if(matcher.matches()){
paragraph+=matcher.group(2);
paragraph+="\n\n";
status=1;
}
}
if(status==1){
//还没有碰到文章的开头
Patternpattern=Pattern.compile("(.*)<fontid=\"zoom\"class=f14><p>(.*)<!--NEWSZW_HZH_BEGIN-->(.*)");
Matchermatcher=pattern.matcher(line);
if(matcher.matches()){
paragraph+=matcher.group(2);
status=2;//碰到了正文中的画中画
}
}
if(status==2){
Patternpattern=Pattern.compile("(.*)<!--NEWSZW_HZH_END-->(.*)</p>");
Matchermatcher=pattern.matcher(line);
if(matcher.matches()){
paragraph+=matcher.group(2);
status=3;
}
}
}
//替换掉</p><p>
returnparagraph.replaceAll("</p><p>","\n\n");
}catch(Exceptione){
System.out.println(e.toString());
returnnull;
}
}
}
让大家看看截图:
新浪读书频道排行榜:
我写的小程序的运行画面:
下载下来的成果:
最后让大家看看我的IDE,我用上了最新版的NetBeans,还把它的主题改成了苹果样子:
最后要说的是,新浪读书频道上的书,根据URL不同,其源代码的结构也不同,所以要用不同的正则表达式来提取。上面的程序只能提取http://book.sina.com.cn/nzt/lit/小说名/序号.shtml这样的电子书。但是对程序做一点修改是很简单的。