原文地址: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这样的电子书。但是对程序做一点修改是很简单的。
相关推荐
该系统成本还是挺高找了很久也没找到,很多会员反馈需要帮找一下该系统,没办法只有放血购买了,整体安装过程比较顺利一次成型,对比了一下正版SAAS系统系统没多大差别,唯一没有师傅端小程序前端。如果需要该前端...
这里汇聚了各类小程序开发所需的精选资源,无论是设计素材、UI组件、还是功能插件,我们都为您一网打尽。我们深知每位开发者对项目的独特需求,因此我们的资源包不仅数量丰富,而且质量上乘,确保满足您的各种开发...
本篇将深入探讨“运动荟小程序”的核心概念、功能特性以及实际应用,帮助用户更好地理解和利用这款小程序。 首先,我们要了解什么是小程序。小程序是微信、支付宝等平台推出的一种无需下载安装即可使用的应用程序,...
LabVIEW网口TCP通讯:欧姆龙OMRON PLC一网打尽,源码开放,多类型数据批量读写,替代OPC插件,原创视频分享,LabVIEW网口TCP通讯:欧姆龙OMRON PLC一网打尽,源码开放,多类型数据批量读写,替代OPC插件,原创视频...
利用LabVIEW强大的图形化编程功能,开发者可以轻松地将信捷PLC集成到整个自动化系统中,实现对设备状态的实时监控和控制。此外,LabVIEW社区中的专业开发人员还提供了大量的程序源码和命令帧文本,帮助其他开发者...
LabVIEW与汇川PLC通信实战指南:官方协议解析、报文读写、功能一网打尽,源码创作,非诚勿扰,LabVIEW与汇川PLC通信实战指南:协议解读、报文稳定传输、全方位功能实现(附源码),LabVIEW与汇川H5U PLC通信 官方协议...
安装完成后,你将拥有一个内容丰富的直播平台。但要注意,港澳台海外频道并非直接可见,它们被设计为隐藏模式,需要通过遥控器进行特殊操作来解锁。具体步骤如下:在打开软件后,不要立即使用,而是长按遥控器的返回...
Labview与基恩士PLC串口通信详解:源码开放,多种数据格式批量读写,无需插件超越OPC,Labview与基恩士PLC串口通讯通信常用功能一网打尽。 1.源码开放。 2.支持 I16 I32 Float 批量读写。 3.支持字符串读写。 4.支持...
Labview与汇川PLC通讯:官方协议下的报文读取与配置辅助,安全稳定的命令帧读写程序源码,Labview与汇川PLC通讯:官方协议下的报文读取与配置辅助,安全稳定的命令帧读写程序源码,Labview 与汇川AM400 AM600 AM800 AC...
本文将深入探讨“一网打尽Android-UI”中的关键知识点,包括各种UI组件的使用和功能。 1. **关于Android的一些设计**: Android的设计原则强调简洁、直观和一致。开发者应遵循Material Design指南,提供清晰的层次...
这四个词都与遵循规则、规定或标准有关,但在搭配和语境上有所区别。 1. abide v. 后接 by,意为“遵守,同意”。例如:“I will abide by the director's decision.”(我将遵从主任的决定。) 2. adhere v. 后接 ...
该技术方案通过LabVIEW和Modbus协议,为开发者提供了一个强大的平台,用于实现三菱FX5U PLC的网络通讯,尤其是无程序网络通讯的实现。这对于实现复杂工业自动化的控制流程,具有重大的现实意义和应用价值。
例如,“在中实现与西门子之间的网口通讯是一项常见且重要的功.doc”可能包含详细的实现步骤和示例代码,而“网口通讯西门子支持全系列常用功能一网打尽通.html”则可能是一个详细介绍该技术功能的网页文档。...
LabVIEW与信捷PLC串口通讯实现:Modbus协议官方配置与程序源码开发,支持多种数据读写功能,LabVIEW与信捷PLC串口通讯Modbus协议。 官方协议,报文读取,安全稳定。 程序代开发,代写程序。 通讯配置,辅助测试。 ...
工程师可以根据实际需求,利用Labview开发出适合特定应用的控制程序,并通过串口通讯与基恩士PLC无缝连接,实现对生产过程的精确控制。此外,Labview与基恩士PLC的通讯无需安装额外插件,这不仅简化了系统的配置过程...
例如,支持I16、I32和Float类型的数据批量读写,这意味着可以高效地处理多数据点,而无需对每个数据单独进行操作。字符串读写功能则允许工程师在PLC与Labview之间传递文本信息,这对于显示状态信息、记录日志等场景...