iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python爬虫之线程池的使用方法
  • 249
分享到

Python爬虫之线程池的使用方法

2023-06-15 00:06:22 249人浏览 独家记忆

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

摘要

这篇文章主要介绍了python爬虫之线程池的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言学到现在,我们可以说已经学习了爬虫的基础知识,如果没有那些奇奇怪怪的

这篇文章主要介绍了python爬虫线程池的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

一、前言

学到现在,我们可以说已经学习爬虫的基础知识,如果没有那些奇奇怪怪的反爬虫机制,基本上只要有时间分析,一般的数据都是可以爬取的,那么到了这个时候我们需要考虑的就是爬取的效率了,关于提高爬虫效率,也就是实现异步爬虫,我们可以考虑以下两种方式:一是线程池的使用(也就是实现单进程下的多线程),一是协程的使用(如果没有记错,我所使用的协程模块是从python3.4以后引入的,我写博客时使用的python版本是3.9)。

今天我们先来讲讲线程池。

二、同步代码演示

我们先用普通的同步的形式写一段代码

import timedef func(url):    print("正在下载:", url)    time.sleep(2)    print("下载完成:", url)if __name__ == '__main__':    start = time.time() # 开始时间    url_list = [        "a", "b", "c"    ]    for url in url_list:        func(url)    end = time.time() # 结束时间    print(end - start)

对于代码运行的结果我们心里都有数,但还是让我们来看一下吧

Python爬虫之线程池的使用方法

不出所料。运行时间果然是六秒

三、异步,线程池代码

那么如果我们使用线程池运行上述代码又会怎样呢?

import timefrom multiprocessing import Pooldef func(url):    print("正在下载:", url)    time.sleep(2)    print("下载完成:", url)if __name__ == '__main__':    start = time.time() # 开始时间    url_list = [        "a", "b", "c"    ]    pool = Pool(len(url_list)) # 实例化一个线程池对象,并且设定线程池的上限数量为列表长度。不设置上限也可以。    pool.map(func, url_list)    end = time.time() # 结束时间    print(end - start)

下面就是见证奇迹的时候了,让我们运行程序

Python爬虫之线程池的使用方法

我们发现这次我们的运行时间只用2~3秒。其实我们可以将线程池简单的理解为将多个任务同时进行。

注意:

我使用的是 PyCharm,如果使用的是 VS 或者说是 Python 自带的 idle,在运行时我们只能看到最后时间的输出。

我们输出结果可能并不是按 abc 的顺序输出的。

四、同步爬虫爬取图片

因为我们的重点是线程池的爬取效率提高,我们就简单的爬取一页的图片。

import requestsimport timeimport osfrom lxml import etreedef save_photo(url, title):    # UA伪装    header = {        "User-Agent": "Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/90.0.4430.93 Safari/537.36"    }    # 发送请求    photo = requests.get(url=url, headers=header).content    # 创建路径,避免重复下载    if not os.path.exists("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\同步爬虫爬取4K美女图片\\" + title + ".jpg"):        with open("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\同步爬虫爬取4K美女图片\\" + title + ".jpg", "wb") as fp:            print(title, "开始下载!!!")            fp.write(photo)            print(title, "下载完成!!!")if __name__ == '__main__':    start = time.time()    # 创建文件夹    if not os.path.exists("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\同步爬虫爬取4K美女图片"):        os.mkdir("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\同步爬虫爬取4K美女图片")    # UA伪装    header = {        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"    }    # 指定url    url = "https://pic.netbian.com/4kmeinv/"    # 发送请求,获取源码    page = requests.get(url = url, headers = header).text    # xpath 解析,获取图片的下载地址的列表    tree = etree.HTML(page)    url_list = tree.xpath('//*[@id="main"]/div[3]/ul/li/a/@href')    # 通过下载地址获取高清图片的地址和图片名称    for href in url_list:        new_url = "Https://pic.netbian.com" + href        # 再一次发送请求        page = requests.get(url = new_url, headers = header).text        # 再一次 xpath 解析        new_tree = etree.HTML(page)        src = "https://pic.netbian.com" + new_tree.xpath('//*[@id="img"]/img/@src')[0]        title = new_tree.xpath('//*[@id="img"]/img/@title')[0].split(" ")[0]        # 编译文字        title = title.encode("iso-8859-1").decode("gbk")        # 下载,保存        save_photo(src, title)    end = time.time()    print(end - start)

让我们看看同步爬虫需要多长时间

Python爬虫之线程池的使用方法

然后再让我们看看使用线程池的异步爬虫爬取这些图片需要多久

五、使用线程池的异步爬虫爬取4K美女图片

import requestsimport timeimport osfrom lxml import etreefrom multiprocessing import Pooldef save_photo(src_title):    # UA伪装    header = {        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"    }    # 发送请求    url = src_title[0]    title = src_title[1]    photo = requests.get(url=url, headers=header).content    # 创建路径,避免重复下载    if not os.path.exists("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\异步爬虫爬取4K美女图片\\" + title + ".jpg"):        with open("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\异步爬虫爬取4K美女图片\\" + title + ".jpg", "wb") as fp:            print(title, "开始下载!!!")            fp.write(photo)            print(title, "下载完成!!!")if __name__ == '__main__':    start = time.time()    # 创建文件夹    if not os.path.exists("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\异步爬虫爬取4K美女图片"):        os.mkdir("C:\\Users\\ASUS\\Desktop\\CSDN\\高性能异步爬虫\\线程池\\异步爬虫爬取4K美女图片")    # UA伪装    header = {        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"    }    # 指定url    url = "https://pic.netbian.com/4kmeinv/"    # 发送请求,获取源码    page = requests.get(url = url, headers = header).text    # xpath 解析,获取图片的下载地址的列表    tree = etree.HTML(page)    url_list = tree.xpath('//*[@id="main"]/div[3]/ul/li/a/@href')    # 存储最后的网址和标题的列表    src_list = []    title_list = []    # 通过下载地址获取高清图片的地址和图片名称    for href in url_list:        new_url = "https://pic.netbian.com" + href        # 再一次发送请求        page = requests.get(url = new_url, headers = header).text        # 再一次 xpath 解析        new_tree = etree.HTML(page)        src = "https://pic.netbian.com" + new_tree.xpath('//*[@id="img"]/img/@src')[0]        src_list.append(src)        title = new_tree.xpath('//*[@id="img"]/img/@title')[0].split(" ")[0]        # 编译文字        title = title.encode("iso-8859-1").decode("gbk")        title_list.append(title)    # 下载,保存。使用线程池    pool = Pool()    src_title = zip(src_list, title_list)    pool.map(save_photo, list(src_title))    end = time.time()    print(end - start)

让我们来看看运行的结果

Python爬虫之线程池的使用方法

只用了 17 秒,可不要小瞧这几秒,如果数据太大,这些差距后来就会更大了。

注意

不过我们必须要明白 线程池 是有上限的,这就是说数据太大,线程池的效率也会降低,所以这就要用到协程模块了。

Python主要用来做什么

Python主要应用于:1、web开发;2、数据科学研究;3、网络爬虫;4、嵌入式应用开发;5、游戏开发;6、桌面应用开发。

感谢你能够认真阅读完这篇文章,希望小编分享的“Python爬虫之线程池的使用方法”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网Python频道,更多相关知识等着你来学习!

--结束END--

本文标题: Python爬虫之线程池的使用方法

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

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

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

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

下载Word文档
猜你喜欢
  • Python爬虫之线程池的使用方法
    这篇文章主要介绍了Python爬虫之线程池的使用方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言学到现在,我们可以说已经学习了爬虫的基础知识,如果没有那些奇奇怪怪的...
    99+
    2023-06-15
  • Python爬虫之线程池的使用
    目录一、前言二、同步代码演示三、异步,线程池代码四、同步爬虫爬取图片五、使用线程池的异步爬虫爬取4K美女图片一、前言 学到现在,我们可以说已经学习了爬虫的基础知识,如果没有那些奇奇怪...
    99+
    2024-04-02
  • python异步爬虫之多线程
    多线程,多进程(不建议使用)优点:可以为相关阻塞的操作单独开启线程或者进程,阻塞操作可以异步执行弊端:无法无限制开启多线程或多进程。原则:线程池处理的是阻塞且耗时的操作 单线爬虫示例...
    99+
    2024-04-02
  • Python异步爬虫多线程与线程池示例详解
    目录背景异步爬虫方式多线程,多进程(不建议)线程池,进程池(适当使用)单线程+异步协程(推荐)多线程线程池背景 当对多个url发送请求时,只有请求完第一个url才会接着请求第二个ur...
    99+
    2024-04-02
  • python爬虫ip代理池的搭建方法
    这篇文章主要讲解了“python爬虫ip代理池的搭建方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python爬虫ip代理池的搭建方法”吧!1、选择合适的代理软件并进行ip过滤。总共有2...
    99+
    2023-06-20
  • Python中多线程和线程池的使用方法
    Python是一种高级编程语言,它在众多编程语言中,拥有极高的人气和使用率。Python中的多线程和线程池是其强大的功能之一,可以让我们更加高效地利用CPU资源,提高程序的运行速度。本篇博客将介绍Py...
    99+
    2023-10-12
    python
  • Python线程池的正确使用方法
    目录Python线程池的正确使用1、为什么要使用线程池呢?2、线程池怎么用呢?3、如何非阻塞的获取线程执行的结果4、线程池的运行策略Python线程池的正确使用 1、为什么要使用线程...
    99+
    2024-04-02
  • Python爬虫代理池搭建的方法步骤
    搭建Python爬虫代理池的方法步骤如下:1. 安装所需的依赖库:首先,确保你已经安装了Python和pip。然后使用pip安装所需的库,如requests、beautifulsoup、flask等。2. 获取代理IP:你可以从一些免费...
    99+
    2023-08-11
    Python
  • python学习-Selenium爬虫之使用代理ip的方法
     今天给大家分享的是如何在爬取数据的时候防止IP被封,今天给大家分享两种方法,希望大家可以认真学习,再也不用担心被封IP啦。第一种:降低访问速度,我们可以使用time模块中的sleep,使程序每运行一次后就睡眠1s,这样的话就可以...
    99+
    2023-06-02
  • Python爬虫学习之requests的使用教程
    目录requests库简介requests库安装1、pip命令安装2、下载代码进行安装requests库的使用发送请求get请求抓取二进制数据post请求POST请求的文件上传利用r...
    99+
    2024-04-02
  • Python爬虫之BeautifulSoup的基本使用教程
    目录bs4的安装bs4的快速入门解析器的比较(了解即可)对象种类bs4的简单使用获取标签内容获取标签名字获取a标签的href属性值遍历文档树案例练习思路代码实现总结bs4的安装 要使...
    99+
    2024-04-02
  • python爬虫之requests库使用代理方式
    目录安装上requests库GET方法谷歌浏览器的开发者工具POST方法使用代理在看这篇文章之前,需要大家掌握的知识技能: python基础html基础http状态码 让我们看看这篇...
    99+
    2024-04-02
  • python爬虫http代理使用方法
    目前,许多网站都设置了相应的防爬虫机制。这是因为有些人在实际的防爬虫主权过程中恶意收集或恶意攻击。一般来说,爬虫类开发者为了能够正常收集数据,速度相对较慢,或者一部分爬虫类开发者在网...
    99+
    2024-04-02
  • java多线程爬虫爬取百度图片的方法
    小编给大家分享一下java多线程爬虫爬取百度图片的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java的特点有哪些Java的特点有哪些1.Java语言作为静...
    99+
    2023-06-14
  • python爬虫之代理ip正确使用方法实例
    目录代理ip原理输入网址后发生了什么呢?代理ip做了什么呢? 为什么要用代理呢?爬虫代码中使用代理ip检验代理ip是否生效 未生效问题排查1.请求协议不匹配2.代...
    99+
    2024-04-02
  • python爬虫实战之爬取百度首页的方法
    这篇文章给大家分享的是有关python爬虫实战之爬取百度首页的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代...
    99+
    2023-06-14
  • python爬虫之selenium库的安装及使用教程
    目录第一步:python中安装selenium库第二步:下载谷歌浏览器驱动并合理放置第三步:使用selenium爬取QQ音乐歌词(简单示例)第一步:python中安装selenium...
    99+
    2024-04-02
  • python爬虫之requests库的使用详解
    目录python爬虫—requests库的用法基本的get请求带参数的GET请求:解析json使用代理获取cookie会话维持证书验证设置超时异常捕获异常处理 总结 python爬虫...
    99+
    2024-04-02
  • 好程序员Python学习路线之python爬虫入门
      好程序员Python学习路线之python爬虫入门,随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yaho...
    99+
    2023-06-02
  • python爬虫之pyppeteer库简单使用
    pyppeteer 介绍Pyppeteer之前先说一下Puppeteer,Puppeteer是谷歌出品的一款基于Node.js开发的一款工具,主要是用来操纵Chrome浏览器的 AP...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作