隨筆-26  評論-111  文章-19  trackbacks-0
          源代碼發布

          snoics-reptile?網頁爬蟲2.0?
          作者: 施偉
          EMail: snoics@hotmail.com
          主頁: http://www.aygfsteel.com/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 閱讀(4530) 評論(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,很急用啊,萬分感激  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 丹东市| 尼勒克县| 竹北市| 柳林县| 镇雄县| 新安县| 密山市| 济南市| 牡丹江市| 湖口县| 大安市| 遂溪县| 福州市| 门源| 花垣县| 丹阳市| 黔西| 三门峡市| 屏边| 云梦县| 报价| 襄樊市| 阿图什市| 进贤县| 雷州市| 怀安县| 安徽省| 永川市| 彭州市| 丽江市| 宁明县| 施甸县| 洛扎县| 绥宁县| 万载县| 盱眙县| 阿鲁科尔沁旗| 汶上县| 文登市| 绥滨县| 中阳县|