学习一键获取免费真实的匿名代理

昨天闲来无事,实现了一个代理工厂,该程序自动从网上抓取免费代理(实现了9个代理网站哦),并对代理的可用性和匿名性进行检查,同时定时检查有效代理和无效代理,对于多次检查始终无效的代理,做放弃处理。同时检查函数可以自定义指定,用来针对不同的检查结果做出不同的反应。当然代理网站也可以自定义,简单的几行代码几条配置信息,实现最大限度的free-style。

网上抓取免费代理的小程序已经很多了,那为什么我还要写呢,原因只有一个,用起来简单,免费代理这东西,你指望他用来看电影,就是扯蛋,网速都贼慢。说白了,用他只是为了提供给我们广大程序员一个可用ip罢了,那么这个程序肯定是程序员怎么用起来方便怎么写。pip一键安装,守护进程的方式启动,剩下的不需要你操心了,直接去redis中获取有效代理即可。

原理什么的不讲了,都差不多,直接说使用方法

使用docker一键启动!

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

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

安装

# 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("http://2017.ip138.com/ic.asp", 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 = "http://www.kxdaili.com/dailiip/1/%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混淆反爬,有兴趣的可以研究一下。

欢迎交流指导


Python学习交流群:834179111,群里有很多的学习资料。欢迎欢迎各位前来交流学习。
本文转自网络 如有侵权 请联系小编删除

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,378评论 25 707
  • 美女都是狠角色,想当美女,也想当狠角色,只是这个路,到达终点有点长,特别是前者,为此,还要继续努力。早安!
    七彩木兰阅读 180评论 0 0
  • 前两天发了一条朋友圈,“再好的关系,都往往死于开始互相猜忌”。而这两天一直在考虑这句话,因为如果一开始就没信任过,...
    不是寰的宸默silence阅读 1,187评论 0 0
  • 枯了一季的树悄悄抽了新芽 窗外的绿植也偷偷添了新叶 这个季节的清凉 很容易让人遐想 想和你在南锣的小巷走一走 轻挽...
    微风撩了谁的发阅读 503评论 1 1