pythonaiohttp:关于会话obj的实用程序

2024-06-16 08:32:03 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个工作代码,从互动经纪人的网站抓取链接。在

在aiohttp的documentation中,他们说总是使用aiohttp.ClientSession()对象,以便从一个请求到另一个请求重用“会话”。但是我从多个请求示例(here for instance)中可以看到,每个请求创建一个会话。。。?那么会话对象的兴趣是什么呢?在

import asyncio
from aiohttp import ClientSession

exchanges_by_locs=[]
inst_type_dicts=[]
async def inst_types(url):
    async with ClientSession() as session:
        async with session.get(url) as response:
            response = await response.text()
            html = lxml.html.fromstring(response)
            p=html.xpath('//*[@id="toptabs"]/ul/li')
            for e in p:
                inst=dict(inst_type=e.find('a/span').text, 
                          url='https://www.interactivebrokers.com'+e.find('a').attrib['href'])
                inst_type_dicts.append(inst)

async def inst_by_loc(inst):
    url=inst['url']
    print("start: ",inst['inst_type'])
    async with ClientSession() as session:
        async with session.get(url) as response:
            doc = requests.get(url).content
            html = lxml.html.fromstring(doc)
            p=html.xpath('//*[@class="subtabsmenu"]/li')    
            for e in p:
                exchanges_by_loc=dict(loc=e.find('a/span').text, 
                          loc_url='https://www.interactivebrokers.com'+e.find('a').attrib['href'])
                exchanges_by_locs.append(exchanges_by_loc)
            print("complete: ",inst['inst_type'])

loop = asyncio.get_event_loop()
loop.run_until_complete(inst_types(url))
loop.run_until_complete(
    asyncio.gather(
        *(inst_by_loc(inst) for inst in inst_type_dicts)
    )
)

Tags: urlforgetasyncbyresponsesessionhtml