|
|||||||||
|
|||||||||
|
|||||||||
|
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无法辨认 |