python3——url存活性探测脚本(asyncio+aiohttp)

之前跑2000多个url 用requests写的简单脚本跑了两三个小时,属实顶不住,用asyncio+aiohttp写了一个,代码写的可能不咋地,但能跑,出结果没啥问题

# -*- coding: UTF-8 -*-
import time
import asyncio
import sys
import os
import datetime
import aiohttp
import warnings
import concurrent

warnings.filterwarnings("ignore")

if os.path.exists('./scan_result') == 0:
    os.makedirs('./scan_result')

url_result_success = []
tasks = []


def save_result():
    global url_result_success
    print(url_result_success)
    nowTime = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
    nowTime = str(nowTime)
    filename = './scan_result/URL_alive_{}.txt'.format(nowTime)
    fn = open(filename, mode='w+')
    fn.write('本次扫描存活个数:' + str(len(url_result_success)) + '\n')
    fn.writelines(url_result_success)


async def check(url, semaphore):
    global url_result_success
    try:
        async with semaphore:
            async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=64, verify_ssl=False)) as session:
                async with session.get(url) as resp:
                    print(url + "    " + str(resp.status))
                    if resp.status == 200:
                        url_result_success.append(url+'\n')
                        return await resp.text()

    except (aiohttp.client_exceptions.ClientConnectorError, concurrent.futures._base.TimeoutError) as e:
        #print(e)
        pass



def run(url_text):
    f = open(url_text, 'r')
    url = f.readlines()
    f.close()
    length = len(url)
    print("本次扫描共探测" + str(length) + "个url的存活情况")
    for i in range(0, length):
        semaphore = asyncio.Semaphore(300)  # 限制并发量为300
        task = asyncio.ensure_future(check("https://"+url[i].strip(), semaphore))
        tasks.append(task)
    result = loop.run_until_complete(asyncio.gather(*tasks))
    #print(result)


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    run("url.txt")
    # loop.run_until_complete(asyncio.wait(tasks))
    save_result()

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值