配置环境
本项目基于spring boot框架快速开发,相比于spring mvc,提供了很多开箱即用的模块,即spring-boot-starter.
之所以能做到开箱即用,自动配置,是因为提供了很多自动化配置的类,这些自动化配置的类会判断classpath中是否存在自己需要的那个类。
因为在代码实现中,IP的抓取和校验都需要一定的时间,故需要一个缓存机制来存储。
增加lombok工具
使用 @Slf4j 注解打印日志更加方便。
Maven无法自动补全依赖库
- 将下载好的spring的jar包放在./m2/responsity中,之后在maven的setting中手动更新本地仓库的jar索引来解决。
- 打开设置界面,选中本地的仓库,点击右上角的update,更新maven仓库索引。 这样对于已经下载到本地的jar都可以自动进行补全了。
- 缺少resource文件夹,设置成resource boot,即mark dectionary as source boot,可以在该文件夹下面建立包。
- 在pom.xml文件中直接添加依赖,然后点击右上角搜索框,输入maven project,点击刷新,可以对依赖库进行自动下载。
CacheService缓存类
提供缓存服务,用于缓存代理数据。
要想使爬虫健壮,则需要用到代理池,每次请求的时候都带上代理去请求,隐藏爬虫身份。
1 | 4j |
1 | /** |
RemovalNotification中包含了缓存的key、value以及被移除的原因RemovalCause。通过源码可以看出,移除原因与容量管理方式是相对应的。如果时间过期,则打印日志。
1 | cache.getIfPresent(key); |
UserAgentService类
先搜集一些已知的UA信息写到一个 txt 文件中,初始化时将UA信息加载到List中。
User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息的标识。通过这个标 识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者进行信息统计;
例如用手机访问谷歌和电脑访问是不一样的,这些是谷歌根据访问者的 UA来判断的。UA可以进行伪装。
浏览器的UA字串的标准格式:浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识版本信息。但各个浏览器有所不同。
@Service用于标注业务层组件,@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
可以使用以下方式指定初始化方法和销毁方法(方法名任意):
1 |
|
1 | SpringContext.getBean() |
1 |
|
构建代理的java原生方法
1 | public HttpHost toHost(){ |
定义http的代理类
1 | public class HttpProxy { |
工厂方法
定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。
如果都是未知的属性,可以使用接口,如果存在已知的属性,使用抽象类更好。
存储数据
1 | public interface Store { |
1 | public class MySQLStore implements Store { |
DBCP工具类
1 | public class DBCPUtil { |
数据库配置
1 |
|
1 | public class JvmUtils { |