??xml version="1.0" encoding="utf-8" standalone="yes"?> V1.01Q?/span> 1、提高创建烦引的效率 2、通过对象池管?/span>IndexWriter?/span>IndexReader对象 3、修正若q?/span>BUG V1.0Q?/span> 初始版本 ZLucene的全文检索框Ӟ提供快速方便的索引创徏及查询方式,q提供扩展功能对框架q行扩展?br />
环境要求 Java1.5+ Lucene 3.0+
2 Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.util.PlatformName
3
4 at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
5 at java.security.AccessController.doPrivileged(Native Method)
6 at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
7 at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
8 at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
9 at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
10 Could not find the main class: org.apache.hadoop.util.PlatformName. Program wil
11 l exit.
l过不断的查扑֎因和试Q终于有了解册个错误的办法Q只需要将${HADOOP_HOME}/bin/hadoop-config.sh文g中的W?90行的一下的内容
修改成以下的内容卛_
]]>
版本更新说明
目地址Q?/span>http://code.google.com/p/snoics-retrieval/
]]>
做了一些小的修改和调整
ZLucene的全文检索框Ӟ提供快速方便的索引创徏及查询方式,q提供扩展功能对框架q行扩展?br />
目地址Q?/span>http://code.google.com/p/snoics-retrieval/
环境要求
Java1.5+
Lucene 3.0+
按顺序依ơؓ
U(0~59Q?
分钟Q?~59Q?
时Q?~23Q?
天(月)Q?~31Q但是你需要考虑你月的天敎ͼ
月(0~11Q?
天(星期Q(1~7 1=SUN ?SUNQMONQTUEQWEDQTHUQFRIQSATQ?
7.q䆾Q?970Q?099Q?/p>
其中每个元素可以是一个??),一个连l区?9-12),一个间隔时?8-18/4)(/表示每隔4时),一个列?1,3,5),通配W。由?月䆾中的日期"?星期中的日期"q两个元素互斥的,必须要对其中一个设|?.
0 0 10,14,16 * * ? 每天上午10点,下午2点,4?br />
0 0/30 9-17 * * ? 朝九晚五工作旉内每半小?br />
0 0 12 ? * WED 表示每个星期三中?2?
"0 0 12 * * ?" 每天中午12点触?
"0 15 10 ? * *" 每天上午10:15触发
"0 15 10 * * ?" 每天上午10:15触发
"0 15 10 * * ? *" 每天上午10:15触发
"0 15 10 * * ? 2005" 2005q的每天上午10:15触发
"0 * 14 * * ?" 在每天下?点到下午2:59期间的每1分钟触发
"0 0/5 14 * * ?" 在每天下?点到下午2:55期间的每5分钟触发
"0 0/5 14,18 * * ?" 在每天下?点到2:55期间和下?点到6:55期间的每5分钟触发
"0 0-5 14 * * ?" 在每天下?点到下午2:05期间的每1分钟触发
"0 10,44 14 ? 3 WED" 每年三月的星期三的下?:10?:44触发
"0 15 10 ? * MON-FRI" 周一臛_五的上午10:15触发
"0 15 10 15 * ?" 每月15日上?0:15触发
"0 15 10 L * ?" 每月最后一日的上午10:15触发
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6L 2002-2005" 2002q至2005q的每月的最后一个星期五上午10:15触发
"0 15 10 ? * 6#3" 每月的第三个星期五上?0:15触发
有些子表辑ּ能包含一些范围或列表
例如Q子表达式(天(星期Q)可以?“MON-FRI”Q?#8220;MONQWEDQFRI”Q?#8220;MON-WED,SAT”
“*”字符代表所有可能的?
因此Q?#8220;*”在子表达式(月)里表C每个月的含义,“*”在子表达式(天(星期Q)表示星期的每一?
“/”字符用来指定数值的增量
例如Q在子表辑ּQ分钟)里的“0/15”表示从第0分钟开始,?5分钟
在子表达式(分钟Q里?#8220;3/20”表示从第3分钟开始,?0分钟Q它?#8220;3Q?3Q?3”Q的含义一?
“Q?#8221;字符仅被用于天(月)和天Q星期)两个子表辑ּQ表CZ指定?
?个子表达式其中之一被指定了g后,Z避免冲突Q需要将另一个子表达式的D?#8220;Q?#8221;
“L” 字符仅被用于天(月)和天Q星期)两个子表辑ּQ它是单?#8220;last”的羃?
但是它在两个子表辑ּ里的含义是不同的?
在天Q月Q子表达式中Q?#8220;L”表示一个月的最后一?
在天Q星期)自表辑ּ中,“L”表示一个星期的最后一天,也就是SAT
如果?#8220;L”前有具体的内容,它就h其他的含义了
例如Q?#8220;6L”表示q个月的倒数W6天,“QRQL”表示q个月的最一个星期五
注意Q在使用“L”参数Ӟ不要指定列表或范_因ؓq会D问题
字段 允许?允许的特D字W?br />
U?nbsp; 0-59 , - * /
?nbsp; 0-59 , - * /
时 0-23 , - * /
日期 1-31 , - * ? / L W C
月䆾 1-12 或?JAN-DEC , - * /
星期 1-7 或?SUN-SAT , - * ? / L C #
q_可选) 留空, 1970-2099 , - * /
版本历史 | |
2.1Q?br /> | 1、不用再配置snoics-configpath.xml中的路径?br />2、定时自动保存Cache 3、修改了一些Bug |
2.0Q?br /> | 核心代码全部重写Q增加了扩展性,通过扩展之后Q基本上能实现对整个|站完整的解?br /> |
1.0Q?br /> | 实现了整站抓取的基本的功能,不能解析Ҏ的URLQ对javascript无法辨认 |
源代码发?/font>
snoics-reptile |页爬虫2.0 |
作者: | 施伟 |
EMailQ?/td> | snoics@hotmail.com |
主页Q?/td> | http://www.tkk7.com/snoics |
FAQ |
1、snoics-reptile是什么?
|
是用UJava开发的Q用来进行网站镜像抓取的工具Q可以用配制文件中提供的URL入口Q?br />把这个网站所有的能用览器通过GET的方式获取到的资源全部抓取到本地Q包括网和?br />U类型的文gQ如Q图片、flash、mp3、zip、rar、exe{文件。可以将整个|站完整C传至 盘内,q能保持原有的网站结构精不变。只需要把抓取下来的网站放到web服务?br />(如:Apache)中,可以实现完整的|站镜像?br /> |
2、现在已l有了其他的cM的YӞZ么还要开发snoics-reptileQ?/font>
|
因ؓ有些在抓取的q程中经怼出现错误的文Ӟ而且对很多?br />javascript控制的URL没有办法正确的解析,而snoics-reptile通过对外提供 接口和配|文件的形式Q对Ҏ的URLQ可以通过自由的扩展对外提 供的接口Qƈ通过配置文g注入的方式,基本上能实现Ҏ有的|页?br />正确的解析和抓取?br /> |
3、如何用?
|
a、配|?bin\snoics-configpath.xml 文g 配|文件中的path节点的值改为conf文g夹在pȝ中的l对路径Q?br /> ? c:\snoics-reptile\conf |
b、配|?conf\snoics-systemconfig.xml 文g 其中parameters节点中的配置为对需要抓取的|站的参数的配置Q?br /> 以下是各个参数的说明Q? 1、websitenameQ?br /> 站点的名U?不能为空Q由字母和数字组? 2、charsetNameQ?br /> 该站点用的字符集类?br /> 3、websiteQ?br /> 被抓取的站点的域名 4、startpageQ?br /> 抓取的v始页?br /> 5、urlQ?br /> 该站点中被抓取的部?如果留空则ؓ整个站点Q可以有多个URLQ?br />每个URL之间使用";"隔开) 6、remoteurlflagQ?br /> 代表q程URL的标志,没有Ҏ情况请不要修Ҏ处,使用默认?br />(多个之间使用";"隔开) 7、forbidurlQ?br /> 该站点中不被抓取的部?多个之间使用";"隔开) 8、cachefileQ?br /> 该站点用的~存文gQ如果缓存文件不存在则自动创Z个新的, 如果已经存在Q则会蝲入文件中保存的信?br /> 9、filerootpathQ?br /> 抓取下的文g的保存\?必须是系l中的绝对\? 10、indexpageQ?br /> 被保存成index.html文g名的URLcd(多个之间使用";"隔开) 11、filenamelengthQ?br /> 面保存到本地时Q随机生成的文g名的长度 12、cacheunitsizeQ?br /> 一个cache单元的大?br /> 13、reptile-downloadfiletypeQ?br /> 被抓取到本地的文gcd(多个之间使用";"隔开) 14、reptile-undownloadfiletypeQ?br /> 面被保存到本地Ӟ该种cd的文件的URL被Ҏq程的URL地址 Q如果这U类型出现在reptile-downloadfiletype中时Q则文g被抓取到本圎ͼ 而URL也将Ҏ本地的URL(多个之间使用";"隔开) |
c、在参数配置好之后,执行bin/run.bat文g |
5、版本历?font size="+0"> |
|
2.0Q?br /> |
核心代码全部重写Q增加了扩展性,通过扩展之后Q基本上能实现对整个|站完整的解?br /> |
1.0Q?br /> |
实现了整站抓取的基本的功能,不能解析Ҏ的URLQ对javascript无法辨认 |
snoics-reptile |页爬虫2.0 |
作者: | 施伟 |
EMailQ?/td> | snoics@hotmail.com |
主页Q?/td> | http://www.tkk7.com/snoics |
FAQ |
1、snoics-reptile是什么?
|
是用UJava开发的Q用来进行网站镜像抓取的工具Q可以?br />配制文g中提供的URL入口Q把q个|站所有的能用览器通过 GET的方式获取到的资源全部抓取到本地Q包括网和各种cd 的文Ӟ如:囄、flash、mp3、zip、rar、exe{文件。可以将?br />个网站完整地下传至硬盘内Qƈ能保持原有的|站l构_不变?br />只需要把抓取下来的网站放到web服务?如:Apache)中,可?br />实现完整的网站镜像?br /> |
2、现在已l有了其他的cM的YӞZ么还要开发snoics-reptileQ?/font>
|
因ؓ有些在抓取的q程中经怼出现错误的文Ӟ而且对很多?br />javascript控制的URL没有办法正确的解析,而snoics-reptile通过对外提供 接口和配|文件的形式Q对Ҏ的URLQ可以通过自由的扩展对外提?br />的接口,q过配置文g注入的方式,基本上能实现Ҏ有的|页?br />正确的解析和抓取?br /> |
3、如何用?
|
a、配|?bin\snoics-configpath.xml 文g 配|文件中的path节点的值改为conf文g夹在pȝ中的l对路径Q?br /> ? c:\snoics-reptile\conf |
b、配|?conf\snoics-systemconfig.xml 文g 其中parameters节点中的配置为对需要抓取的|站的参数的配置Q?br /> 以下是各个参数的说明Q? 1、websitenameQ?br /> 站点的名U?不能为空Q由字母和数字组? 2、charsetNameQ?br /> 该站点用的字符集类?br /> 3、websiteQ?br /> 被抓取的站点的域名 4、startpageQ?br /> 抓取的v始页?br /> 5、urlQ?br /> 该站点中被抓取的部?如果留空则ؓ整个站点Q可以有多个URLQ?br /> 每个URL之间使用";"隔开) 6、remoteurlflagQ?br /> 代表q程URL的标志,没有Ҏ情况请不要修Ҏ处,使用默认?br />(多个之间使用";"隔开) 7、forbidurlQ?br /> 该站点中不被抓取的部?多个之间使用";"隔开) 8、cachefileQ?br /> 该站点用的~存文gQ如果缓存文件不存在则自动创Z个新的, 如果已经存在Q则会蝲入文件中保存的信?br /> 9、filerootpathQ?br /> 抓取下的文g的保存\?必须是系l中的绝对\? 10、indexpageQ?br /> 被保存成index.html文g名的URLcd(多个之间使用";"隔开) 11、filenamelengthQ?br /> 面保存到本地时Q随机生成的文g名的长度 12、cacheunitsizeQ?br /> 一个cache单元的大?br /> 13、reptile-downloadfiletypeQ?br /> 被抓取到本地的文gcd(多个之间使用";"隔开) 14、reptile-undownloadfiletypeQ?br /> 面被保存到本地Ӟ该种cd的文件的URL被Ҏq程的URL 地址Q如果这U类型出现在reptile-downloadfiletype中时Q则文g被抓取 到本圎ͼ而URL也将Ҏ本地的URL(多个之间使用";"隔开) |
c、在参数配置好之后,执行bin/run.bat文g |
5、版本历?font size="+0"> |
|
2.0Q?br /> |
核心代码全部重写Q增加了扩展性,通过扩展之后Q基本上能实现对整个|站完整的解?br /> |
1.0Q?br /> |
实现了整站抓取的基本的功能,不能解析Ҏ的URLQ对javascript无法辨认 |
package com.snoics.base.util;
/**
* Encrypt 字符串加?BR> * @author shiwei
*
*/
public class Encrypt {
public Encrypt() {
}
/**
* 加密字符?BR> * @param encryptstring
* @return String
*/
public static String encrypt(String encryptstring){
String newstring="";
if(encryptstring.length()<1){
return encryptstring;
}else{
String tempstring=StringClass.remove(encryptstring,0,(int)(encryptstring.length()/3));
tempstring=StringClass.getConvertString(tempstring);
encryptstring=StringClass.getConvertString(encryptstring);
newstring=encrypt(encryptstring,tempstring);
return newstring;
}
}
/**
* 普通加密字W串
*
* @param encryptstring1
* @param encryptstring2
* @return String
*/
public static String encrypt(String encryptstring1, String encryptstring2) {
int strcount = 0; //字符串ASCII码的d
int newpasswordlength = 0; //生成的密码长?BR> int seed1 = 0; //U子
int seed2 = 0;
String str = "";
String newpassword = ""; //生成的密?BR> char newchar;
int newcharint = 0;
int thechar = 0;
str = encryptstring2 + encryptstring1;
if (str.length() > 0) {
for (int i = 0; i < str.length(); i++) {
strcount = strcount + str.charAt(i);
}
newpasswordlength = (strcount * strcount) / str.length() + str.length();
int temp = 0;
int temp2 = 0;
while ((newpasswordlength <= 0) || (newpasswordlength > 100)) {
temp = temp + str.length();
temp2 = temp + temp2;
newpasswordlength = 100;
}
for (int i = 0; i < encryptstring1.length(); i++) {
seed1 = seed1 + encryptstring1.charAt(i);
}
for (int i = 0; i < encryptstring2.length(); i++) {
seed2 = seed2 + encryptstring2.charAt(i);
}
for (int i = 0; i < newpasswordlength; i++) {
if (i < str.length()) {
thechar = str.charAt(i);
} else {
thechar = str.charAt(i % (str.length() - 1))
+ str.charAt((str.length() - 1)
- (i % str.length()));
}
newcharint = thechar * (seed1 * (i + 1) + thechar);
newcharint = newString(newcharint);
newcharint = thechar * (seed2 * (i + 1) + thechar);
newcharint = newString(newcharint);
newchar = (char) newcharint;
newpassword = newpassword + String.valueOf(newchar);
}
newpassword = newpassword.substring((encryptstring2.length() + encryptstring1.length()) % 100);
return (newpassword);
} else {
return ("I字W串不能被加?);
}
}
private static int newString(int charint) {
while ((charint > 127) || (charint < 32)) {
while (charint > 127) {
charint = (charint - charint/2+1) / 2;
while(charint==60||charint==62||charint==34||charint==32||charint==39){
charint = charint + 1;
}
}
while (charint < 32) {
charint = (charint + charint/2-1) * 2;
while(charint==60||charint==62||charint==34||charint==32||charint==39){
charint = charint + 1;
}
}
}
return (charint);
}
public static void main(String[] args) {
String theusername = "1abc1";
String thepassword = "1def1";
String theusername1 = "1def1";
String thepassword1 = "1abc1";
String newstring=Encrypt.encrypt(theusername,thepassword);
System.out.println("newstring="+newstring);
String newstringa=Encrypt.encrypt(theusername1,thepassword1);
System.out.println("newstringa="+newstringa);
String newstring2=Encrypt.encrypt(newstring);
System.out.println("newstring2="+newstring2);
String newstring3=Encrypt.encrypt(newstring2);
System.out.println("newstring3="+newstring3);
}
}
执行l果: