异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (二)
继上一章:
CSDN
本次需要做的是进行有效ip的验证!
我们知道,从网页上爬取上千上万个ip之后,因为是免费的代理,所以,对这上千上万个ip进行验证有效性就需要考虑效率上的问题了;
而验证ip有效性的唯一办法,就是通过对网络发起请求;如果state=200,就是有效,否则就是无效;
而上千万次的发起请求,如果通过多线程去做,势必会增加服务器的压力;
因此,只能通过异步去验证IP是否有效:
async def check_ip(session, proxy):
"""...略去其它注释,同时函数的docstring也要更新..."""
proxy_url = f"http://{proxy['ip']}:{proxy['port']}"
try:
async with session.get(url="http://httpbin.org/ip", timeout=1.5, proxy=proxy_url) as response:
# 返回原始代理信息和有效性状态
return proxy, response.status == 200
except (aiohttp.ClientError, asyncio.TimeoutError):
# 返回原始代理信息和无效状态
return proxy, False
async def check_ip_main(proxies):
"""
检查IP有效性并返回所有有效的IP列表
"""
asy