返回顶部
首页 > 资讯 > 后端开发 > Python >使用Python怎么实现异步爬虫的原理是什么
  • 244
分享到

使用Python怎么实现异步爬虫的原理是什么

2023-06-15 01:06:23 244人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章给大家介绍使用python怎么实现异步爬虫的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、背景默认情况下,用get请求时,会出现阻塞,需要很多时间来等待,对于有很多请求url时,速度就很慢。因为需

这篇文章给大家介绍使用python怎么实现异步爬虫的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一、背景

默认情况下,用get请求时,会出现阻塞,需要很多时间来等待,对于有很多请求url时,速度就很慢。因为需要一个url请求的完成,才能让下一个url继续访问。一种很自然的想法就是用异步机制来提高爬虫速度。通过构建线程池或者进程池完成异步爬虫,即使用多线程或者多进程来处理多个请求(在别的进程或者线程阻塞时)。

import time #串形 def getPage(url):    print("开始爬取网站",url)    time.sleep(2)#阻塞    print("爬取完成!!!",url)  urls = ['url1','url2','url3','url4','url5'] beginTime = time.time()#开始计时 for url in urls:    getPage(url) endTime= time.time()#结束计时print("完成时间%d"%(endTime - beginTime))

使用Python怎么实现异步爬虫的原理是什么

下面通过模拟爬取网站来完成对多线程,多进程,协程的理解。

二、多线程实现

import time #使用线程池对象from multiprocessing.dummy import Pool def getPage(url):    print("开始爬取网站",url)    time.sleep(2)#阻塞    print("爬取完成!!!",url)  urls = ['url1','url2','url3','url4','url5'] beginTime = time.time()#开始计时 #准备开启5个线程,并示例化对象pool = Pool(5)pool.map(getPage, urls)#urls是可迭代对象,里面每个参数都会给getPage方法处理 endTime= time.time()#结束计时print("完成时间%d"%(endTime - beginTime))

使用Python怎么实现异步爬虫的原理是什么

完成时间只需要2s!!!!!!!!

线程池使用原则:适合处理耗时并且阻塞的操作

三、协程实现

单线程+异步协程!!!!!!!!!!强烈推荐,目前流行的方式。

相关概念:

使用Python怎么实现异步爬虫的原理是什么

#%%import time #使用协程import asyncio  async def getPage(url):  #定义了一个协程对象,Python中函数也是对象    print("开始爬取网站",url)    time.sleep(2)#阻塞    print("爬取完成!!!",url)    #async修饰的函数返回的对象    c = getPage(11) #创建事件对象loop_event = asyncio.get_event_loop()#注册并启动looPloop_event.run_until_complete(c) #task对象使用,封装协程对象c'''loop_event = asyncio.get_event_loop()task = loop_event.create_task(c)loop_event.run_until_complete(task)''' #Future对象使用,封装协程对象c            用法和task差不多'''loop_event = asyncio.get_event_loop()task       = asyncio.ensure_future(c)loop_event.run_until_complete(task)''' #绑定回调使用 async def getPage2(url):  #定义了一个协程对象,python中函数也是对象    print("开始爬取网站",url)    time.sleep(2)#阻塞    print("爬取完成!!!",url)    return url    #async修饰的函数返回的对象    c2 = getPage2(2) def callback_func(task):    print(task.result()) #task.result()返回任务对象中封装的协程对象对应函数的返回值  #绑定回调loop_event = asyncio.get_event_loop()task       = asyncio.ensure_future(c2) task.add_done_callback(callback_func)  #真正绑定,loop_event.run_until_complete(task)

输出:

使用Python怎么实现异步爬虫的原理是什么

四、多任务协程实现

import time #使用多任务协程import asyncio    urls = ['url1','url2','url3','url4','url5']   async def getPage(url):  #定义了一个协程对象,python中函数也是对象    print("开始爬取网站",url)    #在异步协程中如果出现同步模块相关的代码,那么无法实现异步    #time.sleep(2)#阻塞    await asyncio.sleep(2)#遇到阻塞操作必须手动挂起    print("爬取完成!!!",url)    return url     beginTime = time.time()    #任务列表,有多个任务tasks = [] for url in urls:    c = getPage(url)    task = asyncio.ensure_future(c)#创建任务对象    tasks.append(task)loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.wait(tasks))#不能直接放task,需要封装进入asyncio,wait()方法中 endTime = time.time()   print("完成时间%d"%(endTime - beginTime))

使用Python怎么实现异步爬虫的原理是什么

此时不能用time.sleep(2),用了还是10秒

对于真正爬取过程中,如在getPage()方法中真正爬取数据时,即requests.get(url) ,它是基于同步方式实现。应该使用异步网络请求模块aioHttp

参考下面代码:

async def getPage(url):  #定义了一个协程对象,python中函数也是对象    print("开始爬取网站",url)    #在异步协程中如果出现同步模块相关的代码,那么无法实现异步    #requests.get(url)#阻塞    async with aiohttp.ClintSession() as session:                      async with await  session.get(url) as response: #手动挂起                                        page_text =  await response.text() #.text()返回字符串,read()返回二进制数据,注意不是content    print("爬取完成!!!",url)    return page_text

使用Python怎么实现异步爬虫的原理是什么

python可以做什么

Python是一种编程语言,内置了许多有效的工具,Python几乎无所不能,该语言通俗易懂、容易入门、功能强大,在许多领域中都有广泛的应用,例如最热门的大数据分析人工智能web开发等。

关于使用Python怎么实现异步爬虫的原理是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 使用Python怎么实现异步爬虫的原理是什么

本文链接: https://lsjlt.com/news/276542.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Python怎么实现异步爬虫的原理是什么
    这篇文章给大家介绍使用Python怎么实现异步爬虫的原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、背景默认情况下,用get请求时,会出现阻塞,需要很多时间来等待,对于有很多请求url时,速度就很慢。因为需...
    99+
    2023-06-15
  • python异步爬虫机制的原理
    python异步爬虫机制的原理?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、说明默认情况下,在使用get请求时,会出现堵塞,需要很多时间等待,如果有很多请求url,速度会变...
    99+
    2023-06-15
  • Python异步爬虫实现原理与知识总结
    目录一、背景二、多线程实现三、协程实现四、多任务协程实现一、背景 默认情况下,用get请求时,会出现阻塞,需要很多时间来等待,对于有很多请求url时,速度就很慢。因为需要一个url请...
    99+
    2024-04-02
  • Python实现的异步代理爬虫及代理池
    使用python asyncio实现了一个异步代理池,根据规则爬取代理网站上的免费代理,在验证其有效后存入redis中,定期扩展代理的数量并检验池中代理的有效性,移除失效的代理。同时用aiohttp实现了一...
    99+
    2022-06-04
    爬虫 Python
  • Python爬虫的工作原理是什么呢
    本篇文章给大家分享的是有关Python爬虫的工作原理是什么呢,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。随着计算机、互联网、物联网、云计算等网络技术的飞速发展,网络信息呈爆炸...
    99+
    2023-06-02
  • Python用yieldfrom实现异步协程爬虫的实践
    目录一、什么是yield二、yield于列表的区别三、yield from 实现协程一、什么是yield 如果还没有怎么用过的话,直接把yield看做成一种特殊的return(PS:...
    99+
    2023-01-18
    Python yield from异步协程爬虫 Python 异步协程爬虫
  • Python网络爬虫之HTTP原理是什么
    今天小编给大家分享一下Python网络爬虫之HTTP原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。HTTP 基本原...
    99+
    2023-07-06
  • 爬虫使用动态ip代理的原因是什么
    本篇内容介绍了“爬虫使用动态ip代理的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代理ip有那么多种,为什么爬虫都用动态ip代理...
    99+
    2023-06-20
  • python爬虫需要代理IP的原因是什么
    小编给大家分享一下python爬虫需要代理IP的原因是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;...
    99+
    2023-06-14
  • Python异步爬虫requests和aiohttp中代理IP的使用
    爬虫要想爬的好,IP代理少不了。。现在网站基本都有些反爬措施,访问速度稍微快点,就会发现IP被封,不然就是提交验证。下面就两种常用的模块来讲一下代理IP的使用方式。话不多说,直接开始...
    99+
    2024-04-02
  • Python爬虫所需要的爬虫代理ip是什么
    本篇内容主要讲解“Python爬虫所需要的爬虫代理ip是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python爬虫所需要的爬虫代理ip是什么”吧!1 代理类型代理IP一共可以分成4种类型...
    99+
    2023-06-02
  • python爬虫代理池的作用是什么
    Python爬虫代理池的作用是提供一系列可用的代理IP地址,用于在爬虫程序中轮流使用,以避免对目标网站的访问过于频繁而被封IP或限制...
    99+
    2023-10-11
    python
  • Python爬虫是什么及怎么应用
    本篇内容介绍了“Python爬虫是什么及怎么应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!爬虫网络爬虫(又被称为网页蜘蛛,网络机器人)就...
    99+
    2023-07-02
  • 怎么使用PyCharm Profile分析异步爬虫效率
    这篇文章主要介绍“怎么使用PyCharm Profile分析异步爬虫效率”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用PyCharm Profile分析异步...
    99+
    2024-04-02
  • 怎么使用Python爬虫
    本篇内容介绍了“怎么使用Python爬虫”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!导入模块import re fro...
    99+
    2023-06-16
  • python爬虫中分布式爬虫的作用是什么
    这篇文章给大家分享的是有关python爬虫中分布式爬虫的作用是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。随着大数据时代的来临,大数据也吸引了越来越多的关注。网络爬虫是一种高效的信息抓取工具,它集成了搜索引...
    99+
    2023-06-15
  • golang爬虫和Python爬虫的区别是什么
    golang爬虫和Python爬虫的区别是:1、Golang具有较高的性能,而Python通常比较慢;2、Golang的语法设计简洁、清晰,而Python的语法简洁、易读易写;3、Golang天生支持并发,而Python的并发性能相对较差;...
    99+
    2023-12-12
    golang爬虫 Python爬虫
  • python爬虫是干什么的
    python爬虫是指对指定url中获取对我们有用的数据信息,通过代码实现数据的大量获取,只要你能通过浏览器访问的数据都可以通过爬虫获取。实例:爬取图片并下载,先准备好以下几点。pip install requestspip install ...
    99+
    2024-04-02
  • python爬虫抓取数据的步骤是什么
    Python爬虫抓取数据的步骤通常包括以下几个步骤:1. 导入相关库:导入所需的库,例如requests用于发送HTTP请求,Bea...
    99+
    2023-09-08
    python
  • dubbo异步调用的原理是什么
    Dubbo异步调用的原理是通过使用线程池来实现异步调用。首先,服务消费者发送请求给服务提供者,然后服务提供者将请求放入线程池中进行处...
    99+
    2023-10-23
    dubbo
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作