目的:建立自己的代理池。可以添加新的代理网站爬虫,可以测试代理对某一网址的适用性,可以提供获取代理的 API。
整个流程:爬取代理 ----> 将代理存入数据库并设置分数 ----> 从数据库取出代理并检测 ----> 根据响应结果对代理分数进行处理 ----> 从 API 取出高分代理 ----> 用高分代理爬取目标网站
分析:
1、爬虫类的编写:负责抓取代理并返回。
- 因为不同的代理网站的网页结构不同,所以需要单独为每一个代理网页写爬虫。
- 调用每个爬取方法,依次返回结果。
2、数据库类的编写:负责代理的存取与代理分数的设置。
- 判断待存入代理是否存在,不存在便存入数据库。
- 将代理存入数据库,首次入库的代理分数设置为100。
- 代理测试失败时,代理分数做相应的扣除,分数低于指定值时从数据库中移除。代理测试成功时,将代理分数重新设置为100。
- 需要使用代理时,从数据库中随机取出高分代理。
3、保存类的编写:负责执行爬取,并将结果存入数据库。
- 判断数据库是否已经达到满足值,根据返回值决定是否执行爬取。
- 将爬取得到的结果存入数据库
4、测试代理类的编写:负责测试代理对目标网站的可用性。
- 用每一个代理爬取目标网站,根据响应状态码对代理分数进行设置。
5、提取代理 API 的编写:负责提供获取代理信息的接口。
具体实现:
1、Crawler:
2、RedisClient:
3、Saver:
4、Tester:
5、API:
总结:这里我只爬取了两个代理网站的代理,西刺和快代理,可以在 Crawler 类中添加名称以 crwal_ 开始的方法来扩充。详细代码我放到 Github上了,https://github.com/ysl125963/proxy-pool