asyncio和aiohttp

Posted knighterrant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asyncio和aiohttp相关的知识,希望对你有一定的参考价值。

asyncio官网

https://docs.python.org/zh-cn/3/library/asyncio-task.html

下面为伪代码:

import aiohttp

import asyncio
from bs4 import BeautifulSoup import pandas as pd # 将数据存入 li=[]或数据库 #获取页面 li=[] async def fetch(url,session): async with session.get(url) as response: return await response.text # 解析网页 async def parse(html): soup = BeautifulSoup(html,lxml) # 获取网页中的畅销书 book_list=soup.find(ul,class_=book_list)(li) for book in book_list: info =book.find_all(div) # 获取每本畅销书的排名,名称,评论数,作者,出版社 rank = info[0].text[0:-1] name = info[2].text comments = info[3].text.split()[0] author = info[4].text date_and_publisher = info[5].text.split() publisher = date_and_publisher[1] if len(date_and_publisher) >= 2 else ‘‘ # 将每本畅销书的上述信息加入到table中 li.append([rank, name, comments, author, publisher]) # 处理页面 async def download(url): async with aiohttp.ClientSession as session: # 获取页面 html = await fetch(session, url) # 解析页面 await parse(html) # 全部网页urls urls=[url1,url2,url3] # 利用asycio 模块进行一步IO处理 loop = asyncio.get_event_loop() # 异步获取任务 tasks= [asyncio.ensure_future(download(url)) for url in urls] tasks = asyncio.gather(*tasks) loop.run_until_complete(tasks) # 将table转化为pandas中的DataFrame并保存为CSV格式的文件 df = pd.DataFrame(li, columns=[rank,name,comments,author,publisher]) df.to_csv(E://douban/dangdang.csv,index=False)

 

以上是关于asyncio和aiohttp的主要内容,如果未能解决你的问题,请参考以下文章

asyncio/aiohttp 不返回响应

Python asyncio/aiohttp:ValueError:Windows 上 select() 中的文件描述符过多

使用 AsyncIO 和 aiohttp 爬取网站并收集所有 url 的程序

异常事件循环在 python 3.8 中使用 aiohttp 和 asyncio 关闭

Asyncio 和 aiohttp 将所有 url 路径路由到处理程序

即使使用 asyncio 和 aiohttp,方法也会等待请求响应