iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python爬虫的并发编程如何应用
  • 823
分享到

Python爬虫的并发编程如何应用

2023-07-06 11:07:09 823人浏览 薄情痞子

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

摘要

这篇文章主要讲解了“python爬虫的并发编程如何应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python爬虫的并发编程如何应用”吧!什么是并发编程并发编程是指在一个时间段内,能够执行

这篇文章主要讲解了“python爬虫并发编程如何应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python爬虫并发编程如何应用”吧!

什么是并发编程

并发编程是指在一个时间段内,能够执行多个操作的程序设计,通常表现为程序中有多个任务同时启动,可以运行并且相互之间不会产生影响。并发编程的好处是可以提高程序的性能和响应能力。

并发编程在爬虫中的应用

爬虫程序是典型的 I/O 密集型任务,对于 I/O 密集型任务来说,多线程和异步 I/O 都是很好的选择,因为当程序的某个部分因 I/O 操作阻塞时,程序的其他部分仍然可以运转,这样我们不用在等待和阻塞中浪费大量的时间。

线程版本

我们首先来看单线程版本的爬虫程序。这个爬虫程序使用了requests库获取 JSON 数据,并通过open函数将图片保存到本地。

"""example04.py - 单线程版本爬虫"""import osimport requestsdef download_picture(url):    filename = url[url.rfind('/') + 1:]    resp = requests.get(url)    if resp.status_code == 200:        with open(f'images/beauty/{filename}', 'wb') as file:            file.write(resp.content)def main():    if not os.path.exists('images/beauty'):        os.makedirs('images/beauty')    for page in range(3):        resp = requests.get(f'<https://image.so.com/zjl?ch=beauty&sn=>{page * 30}')        if resp.status_code == 200:            pic_dict_list = resp.json()['list']            for pic_dict in pic_dict_list:                download_picture(pic_dict['qhimg_url'])if __name__ == '__main__':    main()

MacOS 或 linux 系统上,我们可以使用time命令来了解上面代码的执行时间以及 CPU 的利用率,如下所示。

time python3 example04.py

下面是单线程爬虫代码在我的电脑上执行的结果。

Python3 example04.py  2.36s user 0.39s system 12% cpu 21.578 total

这里我们只需要关注代码的总耗时为21.578秒,CPU 利用率为12%

多线程版本

我们使用之前讲到过的线程池技术,将上面的代码修改为多线程版本。

"""example05.py - 多线程版本爬虫"""import osfrom concurrent.futures import ThreadPoolExecutorimport requestsdef download_picture(url):    filename = url[url.rfind('/') + 1:]    resp = requests.get(url)    if resp.status_code == 200:        with open(f'images/beauty/{filename}', 'wb') as file:            file.write(resp.content)def main():    if not os.path.exists('images/beauty'):        os.makedirs('images/beauty')    with ThreadPoolExecutor(max_workers=16) as pool:        for page in range(3):            resp = requests.get(f'<Https://image.so.com/zjl?ch=beauty&sn=>{page * 30}')            if resp.status_code == 200:                pic_dict_list = resp.json()['list']                for pic_dict in pic_dict_list:                    pool.submit(download_picture, pic_dict['qhimg_url'])if __name__ == '__main__':    main()

执行如下所示的命令。

time python3 example05.py

代码的执行结果如下所示:

python3 example05.py  2.65s user 0.40s system 95% cpu 3.193 total

异步I/O版本

我们使用aiohttp将上面的代码修改为异步 I/O 的版本。为了以异步 I/O 的方式实现网络资源的获取和写文件操作,我们首先得安装三方库aiohttpaiofile

pip install aiohttp aiofile

下面是异步 I/O 版本的爬虫代码。

"""example06.py - 异步I/O版本爬虫"""import asyncioimport jsonimport osimport aiofileimport aiohttpasync def download_picture(session, url):    filename = url[url.rfind('/') + 1:]    async with session.get(url, ssl=False) as resp:        if resp.status == 200:            data = await resp.read()            async with aiofile.async_open(f'images/beauty/{filename}', 'wb') as file:                await file.write(data)async def main():    if not os.path.exists('images/beauty'):        os.makedirs('images/beauty')    async with aiohttp.ClientSession() as session:        tasks = []        for page in range(3):            resp = await session.get(f'<https://image.so.com/zjl?ch=beauty&sn=>{page * 30}')            if resp.status == 200:                pic_dict_list = (await resp.json())['list']                for pic_dict in pic_dict_list:                    tasks.append(asyncio.ensure_future(download_picture(session, pic_dict['qhimg_url'])))        await asyncio.gather(*tasks)if __name__ == '__main__':    loop = asyncio.get_event_loop()    loop.run_until_complete(main())

执行如下所示的命令。

time python3 example06.py

代码的执行结果如下所示:

python3 example06.py  0.92s user 0.27s system 290% cpu 0.420 total

相对于单线程版本的爬虫程序,多线程版本和异步 I/O 版本的爬虫程序在执行上的时间上有了显著的提升,而且异步 I/O 版本的爬虫程序表现最佳。

感谢各位的阅读,以上就是“Python爬虫的并发编程如何应用”的内容了,经过本文的学习后,相信大家对Python爬虫的并发编程如何应用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Python爬虫的并发编程如何应用

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python爬虫的并发编程如何应用
    这篇文章主要讲解了“Python爬虫的并发编程如何应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python爬虫的并发编程如何应用”吧!什么是并发编程并发编程是指在一个时间段内,能够执行...
    99+
    2023-07-06
  • Python爬虫中的并发编程怎么应用
    什么是并发编程并发编程是指在一个时间段内,能够执行多个操作的程序设计,通常表现为程序中有多个任务同时启动,可以运行并且相互之间不会产生影响。并发编程的好处是可以提高程序的性能和响应能力。并发编程在爬虫中的应用爬虫程序是典型的 I/O 密集型...
    99+
    2023-05-14
    Python
  • Python爬虫中的并发编程详解
    目录并发编程在爬虫中的应用什么是并发编程并发编程在爬虫中的应用单线程版本多线程版本异步I/O版本并发编程在爬虫中的应用 本文将为大家介绍 Python 中的多线程、多进程和异步编程,...
    99+
    2023-05-18
    Python并发编程 Python爬虫
  • Python并发编程:如何应对Apache高并发?
    Apache作为一款世界知名的Web服务器,因其稳定性、安全性、可靠性等特点,在众多Web开发中得到广泛应用。然而,随着互联网的快速发展,用户对Web应用的访问量越来越大,Apache面临着越来越大的高并发压力。如何通过Python并发编...
    99+
    2023-11-13
    并发 apache 关键字
  • 如何分析Python多线程在爬虫中的应用
    本篇文章为大家展示了如何分析Python多线程在爬虫中的应用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。作为测试工程师经常需要解决测试数据来源的问题,解决思路无非是三种:直接从生产环境拷贝真实数据...
    99+
    2023-06-04
  • Go语言如何实现并发爬虫
    这篇文章将为大家详细讲解有关Go语言如何实现并发爬虫,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 单线程爬虫 定义一个用户var Client http.Client主...
    99+
    2023-06-22
  • 如何使用PHP编写爬虫程序
    在互联网时代,信息就像一条无休无止的河流,源源不断地涌出来。有时候我们需要从Web上抓取一些数据,以便分析或者做其他用途。这时候,爬虫程序就显得尤为重要。爬虫程序,顾名思义,就是用来自动化地获取Web页面内容的程序。 作为一门广泛应用的编程...
    99+
    2023-09-03
    php 爬虫 开发语言
  • go语言如何实现并发网络爬虫
    本篇内容主要讲解“go语言如何实现并发网络爬虫”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“go语言如何实现并发网络爬虫”吧!首先我的思路是看一下爬虫的串行实现,然后通过两个并发实现:一个使用锁...
    99+
    2023-07-05
  • Python爬虫工作好做吗?爬虫工作发展前景如何呢?
    为什么网上Python爬虫教程这么多,但是做爬虫的这么少呢?爬虫发展又该是如何呢?我们来看看一篇深入前线的小哥的分析。关于爬虫的技术要求:爬虫掌握熟练的话,包括简单的mysql语句、html和css简单的知识以及最厉害的scrapy爬虫框架...
    99+
    2023-06-02
  • Python 中的并发编程如何实现?
    随着计算机技术的不断发展,现代计算机越来越强大,可以同时处理多个任务。这也引发了并发编程的需求。Python 是一种强大的编程语言,它提供了多种并发编程的方式。本文将介绍 Python 中的并发编程以及如何实现它。 一、线程 线程是计算机...
    99+
    2023-10-04
    并发 数组 javascript
  • Python并发编程是如何实现的?
    在当今的软件开发领域中,多线程和并发编程已经变得越来越重要。Python作为一门高级编程语言,也提供了许多并发编程的方式和工具。在本文中,我们将介绍Python并发编程的实现方式,并演示一些代码示例。 Python中的多线程 Python...
    99+
    2023-06-02
    并发 文件 分布式
  • 如何用Python爬虫爬取美剧网站
    如何用Python爬虫爬取美剧网站,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。爬虫爬取美剧网站!【前言】一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打...
    99+
    2023-06-02
  • Python爬虫Requests库如何使用
    本篇内容主要讲解“Python爬虫Requests库如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python爬虫Requests库如何使用”吧!1、安装 requests 库因为学习过...
    99+
    2023-07-06
  • 使用Go语言开发高并发的网络爬虫
    使用Go语言开发高并发的网络爬虫随着互联网的迅速发展,信息量呈爆炸式增长。为了获取海量的数据,网络爬虫成为了一种重要的工具。而在开发网络爬虫时,高并发的处理能力往往是一个关键的需求。本文将介绍如何使用Go语言开发一款高并发的网络爬虫。Go语...
    99+
    2023-11-20
    Go语言 网络爬虫 高并发
  • 异步编程的魔法棒:用 Python 编写并发应用程序
    异步编程是一种编程范式,它允许在不阻塞主线程的情况下执行任务。这对于需要处理大量传入请求或长期运行任务的应用程序至关重要。Python 提供了多种工具,使开发异步应用程序变得轻而易举。 异步编程的好处 高吞吐量:异步应用程序可以同时处...
    99+
    2024-03-09
  • Python并发编程技术如何助力Apache服务器应对高并发?
    在当今互联网时代,随着互联网用户数量的不断增加,网站的并发访问量也越来越大。在这种情况下,如何应对高并发成为了每一个网站开发者必须面对的问题之一。而Apache服务器作为目前使用最为广泛的Web服务器之一,如何通过Python并发编程技术...
    99+
    2023-11-13
    并发 apache 关键字
  • Spring并发编程:如何提高Web应用的性能?
    Spring框架是Java开发中非常流行的框架之一,它提供了很多便捷的功能,使得开发人员能够更加高效地构建Web应用程序。然而,一个好的Web应用程序并不仅仅是能够正常运行,更重要的是它能够在高并发的情况下保持稳定的性能。本文将介绍一些S...
    99+
    2023-08-12
    编程算法 spring 并发
  • GO语言并发编程:如何应对高并发场景?
    在现代互联网时代,高并发场景已经成为了很常见的问题。在这种情况下,GO语言的并发编程能力显得尤为重要。GO语言提供了丰富的并发编程工具和库,能够帮助我们更高效地应对高并发场景。本文将介绍GO语言并发编程的基础知识和一些常用的并发编程技巧,...
    99+
    2023-11-05
    开发技术 编程算法 并发
  • Python 爬虫:如何用 BeautifulSoup 爬取网页数据
    在网络时代,数据是最宝贵的资源之一。而爬虫技术就是一种获取数据的重要手段。Python 作为一门高效、易学、易用的编程语言,自然成为了爬虫技术的首选语言之一。而 BeautifulSoup 则是 Py...
    99+
    2023-10-23
    python 爬虫 beautifulsoup
  • 如何使用Python爬虫爬取网站图片
    这篇文章主要介绍了如何使用Python爬虫爬取网站图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。此次python3主要用requests,解析图片网址主要用beautif...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作