爬虫第四天--概念
Posted bky20061005
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬虫第四天--概念相关的知识,希望对你有一定的参考价值。
线程池
- 导包:from multiprocessing.dummy import Pool
- pool.map(callback,alist)
- 让callback可以异步将alist中的列表元素进行某种形式的操作
- 注意事项:callback必须要有一个参数、
- 主要是被应用在耗时的操作
单线程+多任务的异步协程
特殊函数
- 如果一个函数的定义被async关键字修饰后,则该函数就是一个特殊的函数。
- 特殊之处:
- 该函数被调用后函数内部的实现语句不会被立即执行。
- 该函数会返回一个协程对象
协程:
- 对象。当特殊的函数被调用后,该函数就会返回一个协程对象。
- 协程对象 == 特殊函数
任务对象
- 就是对协程对象的进一步封装(就是一个高级的协程对象)
- 任务对象==协程对象==特殊函数
- 绑定回调:
- task.add_done_callback(funcName)
- funName这个回调函数必须要带一个参数,这个参数表示的就是当前的任务对象
- 参数.result():表示的就是当前任务对象对应的特殊函数的返回值
事件循环对象:
- 创建事件循环对象
- asyncio.get_event_loop()
- 需要将任务对象注册到该事件循环对象中且启动事件循环
- loop.run_until_complete(task)
- 创建事件循环对象
等待(await):当阻塞操作结束后让loop回头执行阻塞之后的代码
挂起(wait()):将当前的任务对象交出cpu的使用权
【重点注意事项】:
- 在特殊函数实现内部不可以出现不支持异步的模块代码,否则会中断整个的异步效果
aiohttp:
requests不支持异步,不可以出现在特殊函数内部。
aiohttp:支持异步的网络请求模块
- pip install aiohttp
代码的编写:
写出基本架构
with aiohttp.ClientSession() as sess:
#with sess.get/post(url=url,headers=headers,data/params,proxy="http://ip:port") as response:
with sess.get(url=url) as response:
#text():获取字符串形式的响应数据
#read():获取bytes类型的响应数据
page_text = response.text()return page_text
补充细节
- 在每一个with前加上async
- 在每一个阻塞操作前加上await关键字
- 代码参照完整代码
完整代码:
async with aiohttp.ClientSession() as sess:
#with sess.get/post(url=url,headers=headers,data/params,proxy="http://ip:port") as response:
async with await sess.get(url=url) as response:
#text():获取字符串形式的响应数据
#read():获取bytes类型的响应数据
page_text = await response.text()return page_text
- 解析到带html标签的文本内容
- bs4
以上是关于爬虫第四天--概念的主要内容,如果未能解决你的问题,请参考以下文章