zoukankan      html  css  js  c++  java
  • requests_html使用asyncio

    import asyncio
    import functools
    from concurrent.futures.thread import ThreadPoolExecutor
    from requests_html import HTMLSession
    import sys
    session = HTMLSession()
    
    
    async def get_response(executor, *, url, loop: asyncio.AbstractEventLoop = None, ):
        if not loop:
            loop = asyncio.get_running_loop()
        request = functools.partial(session.get, url)
        return loop.run_in_executor(executor, request)
    
    
    async def bulk_requests(executor, *,
                            urls,
                            loop: asyncio.AbstractEventLoop = None, ):
        for url in urls:
            yield await get_response(executor, url=url, loop=loop)
    
    
    def filter_unsuccesful_requests(responses_and_exceptions):
        return filter(
            lambda url_and_response: not isinstance(url_and_response[1], Exception),
            responses_and_exceptions.items()
        )
    
    
    async def main():
        executor = ThreadPoolExecutor(10)
        urls = [
            "https://baidu.com",
            "https://cnblogs.com",
            "https://163.com",
        ]
        requests = [request async for request in bulk_requests(executor, urls=urls, )]
        responses_and_exceptions = dict(zip(urls, await asyncio.gather(*requests, return_exceptions=True)))
        responses = {url: resp.html for (url, resp) in filter_unsuccesful_requests(responses_and_exceptions)}
    
        for res in responses.items():
            print(res[1].xpath("//head//title//text()")[0])
    
        for url in urls:
            if url not in responses:
                print(f"No successful request could be made to {url}. Reason: {responses_and_exceptions[url]}",
                      file=sys.stderr)
    
    
    asyncio.run(main())
    
    
  • 相关阅读:
    bzoj1432_[ZJOI2009]Function
    Luogu1681_ 最大正方形II
    初等数论-Base-2(扩展欧几里得算法,同余,线性同余方程,(附:裴蜀定理的证明))
    [bzoj2456] mode
    初等数论-Base-1(筛法求素数,欧拉函数,欧几里得算法)
    小程序之Tab切换
    vue-axios基本用法
    vue-过渡动画
    vue-router实例
    永恒之蓝漏洞利用复现
  • 原文地址:https://www.cnblogs.com/c-x-a/p/11028356.html
Copyright © 2011-2022 走看看