随笔-26  评论-111  文章-19  trackbacks-0
源代码发布

snoics-reptile 网页爬虫2.0 
作者: 施伟
EMail: snoics@hotmail.com
主页: http://www.blogjava.net/snoics


FAQ


1、snoics-reptile是什么?

    是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,
把这个网站所有的能用浏览器通过GET的方式获取到的资源全部抓取到本地,包括网页和各
种类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至
硬盘内,并能保持原有的网站结构精确不变。只需要把抓取下来的网站放到web服务器
(如:Apache)中,就可以实现完整的网站镜像。

2、现在已经有了其他的类似的软件,为什么还要开发snoics-reptile?

    因为有些在抓取的过程中经常会出现错误的文件,而且对很多使用
javascript控制的URL没有办法正确的解析,而snoics-reptile通过对外提供
接口和配置文件的形式,对特殊的URL,可以通过自由的扩展对外提
供的接口,并通过配置文件注入的方式,基本上能实现对所有的网页都
正确的解析和抓取。

3、如何使用?

    a、配置 bin\snoics-configpath.xml 文件

        将配置文件中的path节点的值改为conf文件夹在系统中的绝对路径,
        如: c:\snoics-reptile\conf

    b、配置 conf\snoics-systemconfig.xml 文件

        其中parameters节点中的配置为对需要抓取的网站的参数的配置,

        以下是各个参数的说明:

        1、websitename:

        站点的名称(不能为空,由字母和数字组成)

        2、charsetName:

        该站点使用的字符集类型

        3、website:

        将被抓取的站点的域名

        4、startpage:

        抓取的起始页面

        5、url:

        该站点中将被抓取的部分(如果留空则为整个站点,可以有多个URL,
每个URL之间使用";"隔开)

        6、remoteurlflag:

        代表远程URL的标志,没有特殊情况请不要修改此处,使用默认值
(多个之间使用";"隔开)

        7、forbidurl:

        该站点中不被抓取的部分(多个之间使用";"隔开)

        8、cachefile:

        该站点使用的缓存文件,如果缓存文件不存在则自动创建一个新的,
如果已经存在,则会载入文件中保存的信息

        9、filerootpath:

        抓取下的文件的保存路径(必须是系统中的绝对路径)

        10、indexpage:

        将被保存成index.html文件名的URL类型(多个之间使用";"隔开)

        11、filenamelength:

        页面保存到本地时,随机生成的文件名的长度

        12、cacheunitsize:

        一个cache单元的大小

        13、reptile-downloadfiletype:

        将被抓取到本地的文件类型(多个之间使用";"隔开)

        14、reptile-undownloadfiletype:

        页面被保存到本地时,该种类型的文件的URL将被改成远程的URL地址
,如果这种类型出现在reptile-downloadfiletype中时,则文件将被抓取到本地,
而URL也将改成本地的URL(多个之间使用";"隔开)

    c、在参数配置好之后,执行bin/run.bat文件

4、如何扩展接口?

    扩展接口使用的配置文件是:conf/snoics-reptile-urlregex.xml

    首先加入一段如下的配置
    <bean id="ahrefRegexUrl" class="com.snoics.reptile.regex.url.impl.UrlRegex" singleton="false">
        <property name="regexUrl">
            <!-- 提取可能包含URL的字符串 -->
            <value><![CDATA[<[^!<>]*\shref\s*=\s*["']?[^<>]*["'\s][^<>]*>]]></value>
        </property>
        <property name="replaceRegexUrl">
            <!-- 替换可能包含URL的字符串 -->
            <value><![CDATA[<[^!<>]*\shref\s*=\s*["']?reptile-replace-string["'\s][^<>]*>]]></value>
        </property>
        <property name="getRegexUrl">
            <!-- 提取最终URL -->
            <ref bean="ahrefGetRegexUrl"/>
        </property>
    </bean>
    

    其中ahrefGetRegexUrl是实现了com.snoics.reptile.regex.url.IGetUrlRegex接口的类,用来从可能包含了URL的字符串里面提取其中包含的URL


    其次加入如下的配置:

     <bean id="ahrefGetRegexUrl" class="com.snoics.reptile.regex.url.impl.AhrefGetRegexUrl" singleton="false">
         <property name="regexString">
              <!-- 提取最终URL -->
               <value><![CDATA[href\s*=\s*["']?[^\s"]+["'\s]\s*]]></value>
         </property>
         <property name="unIncludeRegexString">
                <!--
                     排除不需要的类型
                     多个正则表达式之间使用';'隔开
                  -->
                 <value><![CDATA[javascript\s?:\s?;mailto\s?:\s?;^#$;]]></value>
           </property>
      </bean>


    最后,在如下的配置中,加入刚才配置好的部分

    <bean id="urlRegexMap" class="com.snoics.reptile.regex.url.impl.UrlRegexMap">
        <property name="ulrRegexMap">
            <map>
                <!-- 名称 -->
                <entry key="ahref">
                    <!-- 解析URL使用的类 -->
                    <ref bean="ahrefRegexUrl"/>
                </entry>
                <entry key="src">
                    <ref bean="srcRegexUrl"/>
                </entry>
            </map>
        </property>
    </bean>


5、版本历史

2.0:

核心代码全部重写,增加了扩展性,通过扩展之后,基本上能实现对整个网站完整的解析

1.0:

实现了整站抓取的基本的功能,不能解析特殊的URL,对javascript无法辨认

源代码下载地址:

snoics-reptile2.0-src.part1.rar
snoics-reptile2.0-src.part2.rar
snoics-reptile2.0-src.part3.rar
snoics-reptile2.0-src.part4.rar
posted on 2006-06-03 10:53 snoics 阅读(4504) 评论(13)  编辑  收藏

评论:
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2006-06-03 13:53 | colderboy
不错,学习学习  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2006-06-09 09:55 | jimchen
不错,我们正好要从网络抓数据,不过要求用C#写,可以参考参考你程序的一些设计和处理方法。

多谢了。  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2006-07-17 10:22 | roc
您好
您的程序可以处理URL redirect 的情况吗 例如处理java.doworks.cn这样的情况  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2006-07-22 09:36 | snoics
@roc
可以的,只需要把website配置成java.doworks.cn就行  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2006-07-29 21:36 | 李李
挺好的,提个建议
unIncludeRegexString
可以改为
excludeRegexString  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2006-08-19 10:13 | 小梁
给个snoics-systemconfig.xml的列子,行不``配置了半天,不能运行  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2006-09-19 16:58 | 张天顺
给个eclisp工程文件的源代码吧?!!!
程序调试了半天也没有通过。

G:\snoics-reptile2.0\bin>java -classpath ../lib/reptile.jar;../lib/com.jar;../li
b/log4j-1.2.9.jar;../lib/commons-logging.jar;../lib/spring.jar; com.snoics.repti
le.main.NormalMain
Exception in thread "main" java.lang.NoClassDefFoundError: com/snoics/reptile/ma
in/NormalMain


谢谢!!!!!!!!!!!
zhangts8888@yahoo.com.cn  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 [未登录] 2007-12-09 00:25 | king
G:\snoics-reptile2.0\bin>java -classpath ../lib/reptile.jar;../lib/com.jar;../li
b/log4j-1.2.9.jar;../lib/commons-logging.jar;../lib/spring.jar; com.snoics.repti
le.main.NormalMain
Exception in thread "main" java.lang.NoClassDefFoundError: com/snoics/reptile/ma
in/NormalMain


同样的错误  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2008-07-07 01:10 | fgfd
请问能不能出套教程。  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2009-04-17 17:02 | strawbingo
牛人  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 [未登录] 2010-11-08 16:54 | 杨帆
非常感谢!!!thanks!  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 [未登录] 2012-11-29 15:07 | zw
能把snoics.jar的源码发一下吗?谢谢
rainbow_zhaow@163.com  回复  更多评论
  
# re: 源代码发布 snoics-reptile 网页爬虫2.0 2013-07-18 11:06 | 于培峰
给个 snoics-reptile 网页爬虫2.0 的源码吧,发到邮箱972249551@qq.com,很急用啊,万分感激  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: