aiohttp高并发爬虫框架

Posted Bert的理想国

tags:

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

aiohttp高并发爬虫框架






前言


        今天在突然想起了崔庆才书上的一个aiohttp框架,然后就探究了一下,aiohttp官方解释是:Asynchronous HTTP Client/Server for asyncio and Python.就是一个python的异步框架,属于非堵塞式的框架,和requests模块比较相似但是也有巨大区别。requests模块属于堵塞式的模块,堵塞式和非堵塞式的区别就在于,堵塞式是只有一个请求完一个url之后完成所有的操作才会去继续请求第二个url,而非堵塞式是请求完第一个url之后立刻会去请求第二个url,而不是等待io完成之后再去请求第二个url,这就大大的增大了爬取的效率。今天就是使用aiohttp爬取一下新闻网做一个实战,在下一期可能会做一个使用aiohttp做压力测试。



准备


python3.5+(asyncio在3.5之后才有)

aiohttp(使用pip安装)


案例



使用aiohttp爬取新闻网站新闻实战:


1.安装aiohttp框架


pip intsall aiohttp


2.网站分析


(1)分析需要获取的内容

aiohttp高并发爬虫框架


(2)元素审查


aiohttp高并发爬虫框架


代码部分


import aiohttp
import  asyncio
from bs4 import BeautifulSoup
import time
import requests
'''
@author:Bert_fk
@project:aiohttpTest
'''
urls=[]
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/61.0.3163.100 Safari/537.36'
}
url='http://news.sdufe.edu.cn/cdyw/{}.htm'
#使用aiohttp框架,异步发起请求,获得网页源码
async def getData(url,headers):
   async with aiohttp.ClientSession() as session:
       async with session.get(url) as response:
           response=await response.text()
return response
#抽取数据
def extract_elements(data):
   soup=BeautifulSoup(data,'lxml')
ul_list=soup.select('ul[class="neirong1_lista"] li')
a_list=soup.select('ul[class="neirong1_lista"] a')
print(ul_list)
return a_list
#构造url
def conUrl():
   #urls.add(url.format(i) for i in range(89,54,-1))
   urls=[url.format(i) for i in range(225,1,-1)]
return urls
#aiohttp主方法
async def main():
   url_len=conUrl()
for s in range(0,len(url_len)):
    extract_elements(await getData(url_len[s],headers))
start=time.clock()
loop=asyncio.get_event_loop()
#asyncio.ensure_future(main())
loop.run_until_complete(main())
end=(time.clock()-start)
print("aiohttp请求所用时间:"+str(end))


效果展示



总结


aiohttp在爬取信息方面也是比较好用的,在某些方面使用起来优于requests模块。






以上是关于aiohttp高并发爬虫框架的主要内容,如果未能解决你的问题,请参考以下文章

为 aiohttp 爬虫注入灵魂

aiohttp

六十六 aiohttp

golang 并发爬虫

小白学 Python 爬虫(32):异步请求库 AIOHTTP 基础入门

python aiohttp sancio 框架性能测试