aiohttp异步请求页面,如何每请求x个页面,就存入一次数据库呢?

以下是我的代码,功能是 请求一个网页,从网页提取出name,然后存入数据库,

我要请求的网页有10w,

我想实现,每抓50个页面。就自动存入数据库(也就是执行session.commit() ),

但是我完全不知道如何操作,

以前用request我还知道 增加一个变量,来控制循环次数,

但是换了 aiohttp我就摸不到头脑了,跪求大神指点一二


async def get(x):
    async with aiohttp.ClientSession() as session:
        url = f'https://httpbin.org/anything?name={x}'
        async with session.get(url) as resp:
            text1 = await resp.text()
            text1_json = json.loads(text1)
            return text1_json["args"]
            
async def main1(x):
    new_name = await get(x)  #请求网页,并提取出name

    # 存入数据
    user11 = User_table(name=new_name,  created=datetime.datetime.now())  # sqlalchemy的表
    session.add(user11)  # 数据存入缓存


pages = range(1, 100000)

tasks = [asyncio.ensure_future(main1(x)) for x in pages]

loop = asyncio.get_event_loop()

loop.run_until_complete(asyncio.wait(tasks))


session.commit()  # 提交到数据库

print ("work done !!!!")
心有法竹
浏览 514回答 1
1回答

ITMISS

每次提交50个task,完成后继续提交五十个。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python