如何通过Python优化爬虫运行效率?

2026-05-16 23:183阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计598个文字,预计阅读时间需要3分钟。

如何通过Python优化爬虫运行效率?

单线程 + 多任务异步协程 + 协程 + 在函数(特殊函数)定义时,使用async修饰,函数调用后,内部语句不会立即执行,而是返回一个协程对象 + 任务对象=高级的协程对象(进一步封装)。

单线程+多任务异步协程

  • 协程

在函数(特殊函数)定义的时候,使用async修饰,函数调用后,内部语句不会立即执行,而是会返回一个协程对象

  • 任务对象

任务对象=高级的协程对象(进一步封装)=特殊的函数
任务对象必须要注册到时间循环对象中
给任务对象绑定回调:爬虫的数据解析中

  • 事件循环

当做是一个装载任务对象的容器
当启动事件循环对象的时候,存储在内的任务对象会异步执行

  • 特殊函数内部不能写不支持异步请求的模块,如time,requests...否则虽然不报错但实现不了异步

time.sleep -- asyncio.sleep
requests -- aio127.0.0.1:5000/bobo', '127.0.0.1:5000/jay', '127.0.0.1:5000/tom', ] tasks = [] for url in urls: c = get_page(url) task = asyncio.ensure_future(c) tasks.append(task) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks)) end = time.time() print(end-start) # 异步执行! # hello tom! # hello bobo! # hello jay! # 2.0311079025268555

''' aio127.0.0.1:5000/bobo', '127.0.0.1:5000/jay', '127.0.0.1:5000/tom', ] tasks = [] for url in urls: c = get_request(url) task = asyncio.ensure_future(c) task.add_done_callback(parse) #绑定回调函数! tasks.append(task) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks)) end = time.time() print(end-start)

requests模块+线程池

import time import requests from multiprocessing.dummy import Pool start = time.time() urls = [ '127.0.0.1:5000/bobo', '127.0.0.1:5000/jay', '127.0.0.1:5000/tom', ] def get_request(url): page_text = requests.get(url=url).text print(page_text) return page_text pool = Pool(3) pool.map(get_request, urls) end = time.time() print('总耗时:', end-start) # 实现异步请求 # hello jay! # hello bobo! # hello tom! # 总耗时: 2.0467123985290527

小结

  • 爬虫的加速目前掌握了两种方法:

aiohttp模块+单线程多任务异步协程
requests模块+线程池

  • 爬虫接触的模块有三个:

requests
urllib
aiohttp

如何通过Python优化爬虫运行效率?

  • 接触了一下flask开启服务器

以上就是python如何提升爬虫效率的详细内容,更多关于python提升爬虫效率的资料请关注易盾网络其它相关文章!

本文共计598个文字,预计阅读时间需要3分钟。

如何通过Python优化爬虫运行效率?

单线程 + 多任务异步协程 + 协程 + 在函数(特殊函数)定义时,使用async修饰,函数调用后,内部语句不会立即执行,而是返回一个协程对象 + 任务对象=高级的协程对象(进一步封装)。

单线程+多任务异步协程

  • 协程

在函数(特殊函数)定义的时候,使用async修饰,函数调用后,内部语句不会立即执行,而是会返回一个协程对象

  • 任务对象

任务对象=高级的协程对象(进一步封装)=特殊的函数
任务对象必须要注册到时间循环对象中
给任务对象绑定回调:爬虫的数据解析中

  • 事件循环

当做是一个装载任务对象的容器
当启动事件循环对象的时候,存储在内的任务对象会异步执行

  • 特殊函数内部不能写不支持异步请求的模块,如time,requests...否则虽然不报错但实现不了异步

time.sleep -- asyncio.sleep
requests -- aio127.0.0.1:5000/bobo', '127.0.0.1:5000/jay', '127.0.0.1:5000/tom', ] tasks = [] for url in urls: c = get_page(url) task = asyncio.ensure_future(c) tasks.append(task) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks)) end = time.time() print(end-start) # 异步执行! # hello tom! # hello bobo! # hello jay! # 2.0311079025268555

''' aio127.0.0.1:5000/bobo', '127.0.0.1:5000/jay', '127.0.0.1:5000/tom', ] tasks = [] for url in urls: c = get_request(url) task = asyncio.ensure_future(c) task.add_done_callback(parse) #绑定回调函数! tasks.append(task) loop = asyncio.get_event_loop() loop.run_until_complete(asyncio.wait(tasks)) end = time.time() print(end-start)

requests模块+线程池

import time import requests from multiprocessing.dummy import Pool start = time.time() urls = [ '127.0.0.1:5000/bobo', '127.0.0.1:5000/jay', '127.0.0.1:5000/tom', ] def get_request(url): page_text = requests.get(url=url).text print(page_text) return page_text pool = Pool(3) pool.map(get_request, urls) end = time.time() print('总耗时:', end-start) # 实现异步请求 # hello jay! # hello bobo! # hello tom! # 总耗时: 2.0467123985290527

小结

  • 爬虫的加速目前掌握了两种方法:

aiohttp模块+单线程多任务异步协程
requests模块+线程池

  • 爬虫接触的模块有三个:

requests
urllib
aiohttp

如何通过Python优化爬虫运行效率?

  • 接触了一下flask开启服务器

以上就是python如何提升爬虫效率的详细内容,更多关于python提升爬虫效率的资料请关注易盾网络其它相关文章!