Skip to content

Latest commit

 

History

History
 
 

db

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

数据库封装

这个目录下封装了操作数据库的一些接口。 为了通用性,本项目使用SQLite作为底层的数据库,使用sqlite3提供的接口对数据库进行操作。

数据表

主要包含两个表,分别用于储存代理和爬取器:

  1. 代理
字段名称 数据类型 说明
fetcher_name 字符串 这个代理来自哪个爬取器
protocol 字符串 代理协议名称,一般为HTTP
ip 字符串 代理的IP地址
port 整数 代理的端口号
validated 布尔值 这个代理是否通过了验证,通过了验证表示当前代理可用
latency 整数 延迟(单位毫秒),表示上次验证所用的时间,越小则代理质量越好
validate_date 时间戳 上一次进行验证的时间
to_validate_date 时间戳 下一次进行验证的时间,如何调整下一次验证的时间可见后文或者代码Proxy.py
validate_failed_cnt 整数 已经连续验证失败了多少次,会影响下一次验证的时间
  1. 爬取器
字段名称 数据类型 说明
name 字符串 爬取器的名称
enable 布尔值 是否启用这个爬取器,被禁用的爬取器不会在之后被运行,但是其之前爬取的代理依然存在
sum_proxies_cnt 整数 至今为止总共爬取到了多少个代理
last_proxies_cnt 整数 上次爬取到了多少个代理
last_fetch_date 时间戳 上次爬取的时间

下次验证时间调整算法

由于不同代理网站公开的免费代理质量差距较大,因此对于多次验证都失败的代理,我们需要降低对他们进行验证的频率,甚至将他们从数据库中删除。 而对于现在可用的代理,则需要频繁对其进行验证,以保证其可用性。

目前的算法较为简单,可见Proxy.py文件中的validate函数,核心思想如下:

  1. 优先验证之前验证通过并且到了验证时间的代理(conn.py中的getToValidate函数)
  2. 对于爬取器新爬取到的代理,我们需要尽快对其进行验证(设置to_validate_date为当前时间)
  3. 如果某个代理验证成功,那么设置它下一次进行验证的时间为5分钟之后
  4. 如果某个代理验证失败,那么设置它下一次进行验证的时间为 5 * 连续失败次数 分钟之后,如果连续3次失败,那么将其从数据库中删除

你可以修改为自己的算法,主要代码涉及Proxy.py文件以及conn.py文件的pushNewFetchgetToValidate函数。