异步爬取+多线程+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

你可能感兴趣的:(15天玩转高级python,http,tcp/ip,网络协议)