源代碼發布
snoics-reptile?網頁爬蟲2.0?
|
|
|
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 閱讀(4522)
評論(13) 編輯 收藏