一键获取免费真实的匿名代理,真神奇

编程和编码概念

使用docker一键启动!

docker run -d -e REDIS_HOST=192.168.200.150 cnaafhvk/proxy-factory product start

如果你不喜欢用docker的话,那么请往下看。

关注后私信小编 PDF领取十套电子文档书籍

安装

# python3 以上版本 pip install proxy-factory # 依赖 redis(必须), tesseract-ocr(可选)

运行

product start

1分钟后看看你本地redis中good_proxies字段,是不是已经有了不少代理?

超简单有木有

但是!

理想很丰满,现实很骨感。如果你运气好一个坑都没有踩到,那么请点右上角(或左上角)x,我们下次再见。但是我很清楚,99%的盆友都会遇到各种安装坑,所以如何躲坑也是我下面即将讲述的重点,支起耳朵来吧!

首先

程序使用到了redis做为存储,如果你电脑上正好安装有redis同时也启动着,那么恭喜你,这个坑不会撂倒你。如果没有,那么请安装

#ubutnu & pi apt-get install redis-server

其它平台请自行google。

其次

程序使用到了 tesseract-ocr 这个google开源的验证码识别程序,代理网站mimvp很坑爹,端口使用图片,于是乎只能机器识别了。当然,不安装ocr也没有关系,无非放弃这个网站喽。

#ubutnu & pi apt-get install tesseract-ocr

最后

还是上面那个垃圾网站的坑,因为要识别验证码,我对图片进行了处理,所以需要pillow,pillow的安装请自行查看pillow官网,如果想放弃这个网站,打开我的源码,把这个网站相关的代码注释掉即可。

如果你是windows平台,相信我,千万坑总有一个能把你撂倒,珍爱生命,远离windows。

好了,坑讲解完毕。

下面讲启动方式。

启动方式

程序虽小,功能挺全。

先贴下指令

usage: proxy factory [-h] [-s SETTINGS] [-cm CHECK_METHOD] [-sm SPIDER_MODULE] [-d] [{stop,start,restart,status}] positional arguments: {stop,start,restart,status} optional arguments: -h, --help show this help message and exit -s SETTINGS, --settings SETTINGS local settings. -cm CHECK_METHOD, --check-method CHECK_METHOD proivde a check method to check proxies. eg:module.func -sm SPIDER_MODULE, --spider-module SPIDER_MODULE proivde a module contains proxy site spider methods. eg:module -d, --daemon #################################################################### - product start: 程序开始(阻塞式) - product -d start: 程序开始(守护进程模式) - product restart 程序重启(守护进程模式) - product stop 程序关闭(守护进程模式) - product status 程序状态(守护进程模式) - product -s localsettings 指定一个自定义配置模块。(只要在sys.path中就可以找到) - product -cm check-method 指定一个自定义检查方法。(只要在sys.path中就可以找到) - product -sm spider-module 指定一个自定义的spider模块,存放自定义的spider方法。(只要在sys.path中就可以找到)

自定义检查方法

def check(self, proxy): """ 自义定检查方法 :param self: ProxyFactory对象 :param proxy: 代理 :return: True则代理可用,否则False """ import requests resp = requests.get("", proxies={"http": "http://%s"%proxy}) self.logger.info(resp.text) .... return resp.status_code < 300

将检查方法保存成python文件,比如check,然后-cm check.check指向他即可。

自定义代理网站

def fetch_custom(self, page=5): """ 自定义代理网站抓取 :param self:ProxyFactory对象 :param page: 可以在里记录一些可选参数,但是方法只能接收一个必选参数 :return: set类型的代理列表,ip:port """ proxies = set() url_tmpl = "%d.html" for page_num in range(page): url = url_tmpl % (page_num + 1) soup = BeautifulSoup(get_html(url, self.headers), "html") table_tag = soup.find("table", attrs={"class": "segment"}) trs = table_tag.tbody.find_all("tr") for tr in trs: tds = tr.find_all("td") ip = tds[0].text port = tds[1].text latency = tds[4].text.split(" ")[0] if float(latency) < 0.5: # 输出延迟小于0.5秒的代理 proxy = "%s:%s" % (ip, port) proxies.add(proxy) return proxies

将代理网站方法保存成python文件,比如proxy_sites.py 然后-sm proxy_site指向他即可。

配置模块

REDIS_HOST = "0.0.0.0" REDIS_PORT = 6379 # 质量不好的代理检查的时间间隔 BAD_CHECK_INTERVAL = 60 # 质量不好的代理连续检查失败次数的最大值,超过则丢弃 FAILED_TIMES = 5 # 质量好的代理检查的时间间隔 GOOD_CHECK_INTERVAL = 60 # 抓取新代理的时间间隔 FETCH_INTERVAL = 60 LOG_LEVEL = DEBUG LOG_MAX_BYTES = 1024*1024*10 LOG_BACKUPS = 5 LOG_DIR = "/home/pi/logs" LOG_STDOUT = False LOG_JSON = False

将配置模块信息保存成localsettings.py,然后-s 指向他就可以。同时,程序还支持环境变量配置,只要将字段保存为环境变量信息,如 export GOOD_CHECK_INTERVAL = 120,配置即可生效,优先级关系:环境变量>localsettings>defaultsettings。

redis中的状态

127.0.0.1:6379> keys * 1) "good_proxies" 2) "bad_proxies" 127.0.0.1:6379> type good_proxies set 127.0.0.1:6379> type bad_proxies hash 127.0.0.1:6379> smembers good_proxies 1) "110.77.227.20:51552" 2) "46.8.243.89:65205" 3) "118.193.107.175:80" 4) "223.99.214.21:53281" 5) "119.41.200.20:53281" 6) "120.198.224.7:8080" 7) "110.77.177.116:51552" 8) "36.37.219.198:53281" 9) "138.197.230.116:55555" 10) "219.138.58.59:3128" 11) "192.158.236.58:3128" 12) "58.26.10.67:8080" 13) "60.208.44.228:80" 14) "120.198.224.5:8080" 15) "103.231.218.126:53281" 16) "186.215.148.228:80" 17) "210.26.125.142:8080" 18) "31.145.111.12:65103" 19) "218.201.98.196:3128" 20) "61.160.208.222:8080" 21) "101.200.45.131:3128" 22) "120.198.224.6:8080" 23) "52.66.155.0:80" 24) "195.234.87.211:53281" 25) "192.117.146.110:80" 26) "106.14.51.145:8118" 27) "106.75.25.3:80" 28) "177.24.31.129:8080" 29) "203.153.113.226:51552" 30) "118.193.107.222:80" 31) "112.13.93.43:8088" 32) "114.215.103.121:8081" 33) "118.193.107.240:80" 34) "111.56.5.41:80" 35) "118.193.107.138:80" 36) "118.193.107.182:80" 37) "183.215.140.117:8118" 38) "110.77.227.35:51552" 39) "137.74.254.242:3128" 40) "110.77.239.184:51552" 41) "94.177.201.18:80" 42) "110.77.210.182:51552" 43) "202.51.188.170:53281" 44) "124.133.230.254:80" 45) "120.198.224.5:8088" 46) "118.193.107.180:80" 47) "121.69.45.162:8118" 48) "118.193.107.100:80" 127.0.0.1:6379>

9个代理网站,有反爬机制的只有2个,一个是mimvp,使用图片端口反爬,一个是goubanjia,使用js混淆反爬,有兴趣的可以研究一下。