本帖最后由 rangersxiaoyan 于 2022-8-27 19:39 编辑
学习了一下协程用法,赶感觉比线程还要复杂一点,为了偷懒就把他封装成包。
发出来提供给大家指点错误。
第一个文件,xiuren.py
[Python] 纯文本查看 复制代码 # coding=utf-8
# 2022年8月27日17:27:04
import aiohttp
import asyncio
class xiuren:
def __init__(self, urls):
self.urls = urls
self.browser_header = {
'cookie': 'ASPSESSIONIDASQAASCA=DFGGEPNAAJKPIAGBHOKMFNEA; cfstatshowcookie=xiurenji',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.54'}
async def get_data(self, url):
async with aiohttp.ClientSession() as session: # 等价于request
async with session.get(url=url, headers=self.browser_header) as resp: # 等价于resp=request.get()
return [url, await resp.content.read()] # 返回数据
async def main(self):
tasks = [asyncio.create_task(self.get_data(url)) for url in self.urls] # 创建任务列表
await asyncio.wait(tasks) # 执行并发任务
return [i.result() for i in tasks] # 返回数据
def run(self):
loop = asyncio.get_event_loop()
return loop.run_until_complete(self.main()) # 返回数据
调用文件随意,把第一个文件放在同目录下就行。
[Python] 纯文本查看 复制代码
from xiuren import xiuren
urls = [
"https://www.cnblogs.com/yoyoketang/p/16195564.html",
'https://blog.csdn.net/qq_55977554/article/details/122442552',
'https://fanyi.baidu.com/?aldtype=16047#en/zh/Asyn%20chronous',
'https://pc.qq.com/'
]
for i in xiuren(urls=urls).run():
print(i)
说一下大概原理:就是传入URL列表,就是你要爬取的网站链接。返回是一个二位列表,第一个为url,第二个为获取的数据。数据为字节,如果链接是网页文件,自己转一下数据
如果对你有帮助请评价一下有用,给点热心
|