爬虫福音:Github星标14K+,一个开源的IP代理池 |
您所在的位置:网站首页 › 穿越之灵剑山之我有系统 › 爬虫福音:Github星标14K+,一个开源的IP代理池 |
「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战」。 大家好,我是丁小杰! 时间过得真快,一眨眼就到了元宵节,大家记得吃元宵哦~ 为什么要使用代理?不知道大家在写爬虫时是否遇到过这样的情况,测试时爬虫可以正常工作,但运行一段时间,就会发现报错或是没有数据返回,网页可能会提示“IP访问频繁”。这就说明网站对IP方面是有反爬措施的(IP一定时间内的请求次数及速度)。如果超过了某个阈值,就会直接拒绝服务,也就是经常说的“封IP”。 这种情况下,就到了代理IP出场了。代理实际就是代理服务器,它的工作原理其实很简单,在我们正常请求一个网站时,是直接发送请求给Web服务器,Web服务器把响应数据传给我们。而用了代理IP,就像是在本机和Web服务器之间搭建了一个“桥”,此时本机会先向代理服务器发出请求,再由代理服务器发送给Web服务器。响应数据的返回也是同样的道理,都需要代理服务器来中转。这样Web服务器就不容易识别出本机IP了。 但代理IP也有优劣之分,以隐匿性来分有3种:高匿代理,普匿代理,透明代理。 接下来就看看 Github 热门的开源项目 ProxyPool ,如何使用吧! ProxyPool简介一个爬虫代理IP池,定时采集网上发布的免费代理并验证入库,定时检测代理的可用性,提供 API 和 CLI 两种使用方式。同时你也可以扩展代理源以增加代理池IP的质量和数量。 下载代码通过 git clone 下载代码 git clone [email protected]:jhao104/proxy_pool.git下载对应zip文件
打开代码文件中的 setting.py ,根据自己的需求修改项目配置。 # 配置API服务 HOST = "0.0.0.0" # IP PORT = 5000 # 监听端口 # 配置数据库 DB_CONN = 'redis://:[email protected]:8888/0' # 无密码 DB_CONN = 'redis://:@127.0.0.1:8888/0' # proxy table name 表名(自己建的) TABLE_NAME = 'use_proxy' # 配置 ProxyFetcher PROXY_FETCHER = [ "freeProxy01", # 这里是启用的代理抓取方法名,所有fetch方法位于fetcher/proxyFetcher.py "freeProxy02", # .... ] 运行项目启动 redis 服务:redis-server.exe(可执行文件在 redis 安装路径下)。
1.启动调度程序 启动调度程序,在 Proxy_pool 项目路径下打开 cmd 输入: python proxyPool.py schedule读取数据库中的代理。 import redis r = redis.StrictRedis(host="127.0.0.1", port=6379, db=0) result = r.hgetall('use_proxy') result.keys()2.启动webApi服务 python proxyPool.py server启动web服务后, 默认配置下会开启 http://127.0.0.1:5010 的api接口服务: apimethodDescriptionparams/GETapi介绍None/getGET随机获取一个代理可选参数: ?type=https 过滤支持https的代理/popGET获取并删除一个代理可选参数: ?type=https 过滤支持https的代理/allGET获取所有代理可选参数: ?type=https 过滤支持https的代理/countGET查看代理数量None/deleteGET删除代理?proxy=host:ip在爬虫中使用 import requests def get_proxy(): return requests.get("http://127.0.0.1:5010/get/").json() def delete_proxy(proxy): requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy)) # your spider code def getHtml(): # .... retry_count = 5 proxy = get_proxy().get("proxy") while retry_count > 0: try: html = requests.get('http://www.example.com', proxies={"http": "http://{}".format(proxy)}) # 使用代理访问 return html except Exception: retry_count -= 1 # 删除代理池中代理 delete_proxy(proxy) return None代理池中的代理毕竟是爬取的免费代理,IP质量那真是一言难尽,但也足够日常开发使用。 对于使用还有不懂的话,可以看一下完整文档。 项目地址: github.com/jhao104/pro…对于刚入门 Python 或是想要入门 Python 的朋友,可以通过关注公众号“Python新视野”,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |