python until_Python aiohttp异步爬虫(萌新读物,大神勿扰)

本文专为初学者介绍Python aiohttp异步爬虫的入门知识,包括准备工作、异步使用注意事项、如何构建和发送请求等。强调异步爬虫的效率提升和适用场景,同时提醒电脑性能对爬取速度的影响。
摘要由CSDN通过智能技术生成

aiohttp异步爬虫难吗?

难!当然难!首先你找教程就是个问题!面向萌新的更是少的可怜,零零散散,大部分教程都是中级及以上的程度!问题是…………入门篇呢?怎么入门?

还好!这篇文章就是专门解决这个问题的!((≧∇≦)/)

图片发自简书App

准备工作:

Python版本3.5及以上!有安装  aiohttp      asyncio      BeautifulSoup      等库!

这些是准备工作!没有工具怎么撸代码对吧!

还有至少有Python基础!会requests!才能学习喔⊙ω⊙!

异步使用中要注意的地方:

1.异步很快!所以想要为所欲为!电脑一定要好,否则会出现遗失数据的情况(我的辣鸡老电脑43分钟爬了55000张图片,结果程序跑完了只有最多20000张图能看,其他的数据因为电脑太老了来不及写入结果被冲掉了…………所以,要有承受失去一部分数据的心理准备,或者限速!(高级套,土豪套可以无视此限制!)

2.  aiohttp相当于12缸发动机的跑车!所以链接数量只有百来条的同学!请老老实实用requests吧!百来条链接用aiohttp速度会和requests差不多!原因很简单,数量少压根跑不起来!这是大杀器,拿来杀鸡不理想!

3.  记住上面两点!完毕…………!

(怕你们吃亏,提前说出来!)

图片发自简书App

教程正式开始:

1.天才第一步,导入Python库!

图片发自简书App

time是时间模块用来计时的不是本篇必要的库!

aiohttp  我们异步爬虫的主角,还有它老爸——  asyncio  !

我们的解析库BeautifulSoup  爬虫必备!

注意!

建议你安装使用  lxml  来解析,而不是BeautifulSoup  自带的  html.parser  !

如果说aiohttp是请求库中的12V跑车,那么lxml就是解析的12V跑车,两强联手,所向披靡!

2.构建要爬取的链接:

这个应该是基础了,各有各的方法和方式就不多解释了!

图片发自简书App

3.异步第一步 async  def

async=标记为协程,协程就是异步的关键!def 大家都很熟悉了,定义的意思,不做详细解释了!

连在一起

就是以协程的形式定义一个函数  或者  说文化点就是  定义一个协程形式的函数  简化点  定义协程函数!三种骚话版本应该能看懂了吧!get()是我定义的函数名!这个按自己喜好来!记得加上  async  def  就好,

headers是请求头,基础知识不做详解!

图片发自简书App

4.异步第二步 session

图片发自简书App

这一步和 async def 差不多是固定套路,我们的异步请求全是靠aiohttp里面的ClientSession 来执行的,因为是个关键的东西,所以是固定化的!

async with aiohttp.ClientSession() as session:

as 后面的名字可以改动,前半身是固定的,记下来就好!了解了解有什么用就OK了,库的开发者已经帮助我们铺垫好了,按套路走就好!

注意:

async with aiohttp.ClientSession() as session:

这一句

只需要写一次!

只需要写一次!

只需要写一次!

重要的逼,装三遍!

5.发送请求

图片发自简书App

async with session.get(url,headers = headers) as resp:

这一句就是请求部分了,session是我定义的名字,你们换成自己的!url是链接,headers是请求头,除了get外,其他的和requests差不多也能 post 等同于requests.get(url,headers=headers)

仅仅是把requests.get请求置换成了async with session.get()了而已,然后依次解析!写法和requests差不多吧!

图片发自简书App

我放图你们自己琢磨!我过一下重要部分就好!

图片发自简书App

注意,之所以上下错开是我调了编译器的设置,不然代码截图不完全,你们还是按Python正常的写法,缩进书写!

6.重点部分来了!

图片发自简书App

第一句和最后一句跳过,是统计程序运行时间的代码!可有可无!

loop = asyncio.get_event_loop()

又一句固定化代码!照抄就好,作用是开启循环模式,因为异步就是信息循环的过程,这一句相当于给汽车打火!

tasks =[get(i)for i in a]

还记得a列表吗?就是我们拼接或者循环得到的所有主要链接!通过迭代的方式赋值给我定义的协程函数get(),注意,[  ]  这个无论如何都是要的,没他没法跑起来,估计是内部有函数需要用[  ]判断链接是否发送过吧!和a列表原理应该差不多,不过它是内置在里面的而已!注意一下就好!

loop.run_until_complete(asyncio.wait(tasks))

这一句,差不多也算固定化代码,里面的tasks变量名可以改成你自己的,这一句的作用就是启动循环跑起来的意思,相当于踩汽车油门,愉快开跑的意思!

我们来梳理一下!

1.构建链接

2.定义一个协程函数体(此时的async仅仅起到了标明只是一个协程定义函数的作用,后面的才是发挥作用的代码,形象的比喻,就是,只是一个协程的文件夹,代码在里面!)

3.async with aiohttp.ClientSession() as session:

以协程的形式使用请求功能的主要函数,没他不能get请求,固定套路,缺一不可!

4.async with session.get(url,headers = headers) as resp:

get请求的方式,用于异步请求,出自aiohttp.ClientSession()

(跳过部分:这一段是请求和解析的部分,因人而异,所以跳过,会requests和BeautifulSoup都懂!)

5.loop = asyncio.get_event_loop()

开启消息循环,固定套路,缺一不可!

6.tasks =[get(i)for i in a]

这个迭代真的不用讲吧!基础知识!

7.loop.run_until_complete(asyncio.wait(tasks))

这一句,启动所有代码!

汽车人!出发!

异步爬虫讲解完毕!其他的解析js啊!反爬虫啊!什么的就自己去掌握了,知识是说不完的!下面是不错的教程用于参考!

aiohttp还能用于异步服务器端喔!这些百度的到!反正是个很强大的库!

是不是灰常简单!除了代码变动了一下其他简直和requests一模一样的写法有木有!就这样就能轻松实现异步操作!这一点非常的Python!一句话————牛逼!墙都不服,就服你!

图片发自简书App

简书处女作——完成!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值