当前位置 : 主页 > 编程语言 > python >

python高性能异步爬虫

来源:互联网 收集:自由互联 发布时间:2022-12-20
目的: 在爬虫中使用异步实现高性能的数据爬取操作。 异步爬虫的方式: 1、多线程,多进程(不建议): 好处:可以为相关阻塞的操作单独开启线程,阻塞操作就可以异步执行。 弊

目的:

在爬虫中使用异步实现高性能的数据爬取操作。

异步爬虫的方式:

1、多线程,多进程(不建议):

好处:可以为相关阻塞的操作单独开启线程,阻塞操作就可以异步执行。

弊端:无法无限制的开启多线程或者多进程。

2、线程池、进程池(适当的使用):

好处:可以降低系统对进程或者线程创建和销毁的一个频率,从而很好的降低系统的开销。

弊端:池中线程或进程的数量是有上限。

原则:线程池处理的是阻塞且耗时的操作。

不加线程池的操作:

# coding:utf-8import requestsimport timeheaders = { "User-Agent": "Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KABUL, like Gecko) " "Chrome/86.0.4240.198Safari/537.36 " }urls = [ 'https://mirrors.tuna.tsinghua.edu.cn/apache/accumulo/1.10.2/accumulo-1.10.2-bin.tar.gz', 'https://mirrors.tuna.tsinghua.edu.cn/apache/accumulo/2.1.0/accumulo-2.1.0-bin.tar.gz', 'https://mirrors.tuna.tsinghua.edu.cn/apache/activemq/5.16.5/apache-activemq-5.16.5-bin.zip']def get_content(url): print("正在获取:", url) # get方法是一个阻塞的方法 resp = requests.get(url, headers=headers) if resp.status_code == 200: return resp.contentdef parse_content(content): print("响应数据的长度为:", len(content))start_time = time.time()for url in urls: content = get_content(url) parse_content(content)end_time = time.time()print('%d second'% (end_time-start_time))

python高性能异步爬虫_线程池

增加线程池的操作:

# coding:utf-8# coding:utf-8import requestsimport timefrom multiprocessing.dummy import Poolheaders = { "User-Agent": "Mozilla/5.0(Windows NT 6.1;WOW64) AppleWebKit/537.36(KABUL, like Gecko) " "Chrome/86.0.4240.198Safari/537.36 " }urls = [ 'https://mirrors.tuna.tsinghua.edu.cn/apache/accumulo/1.10.2/accumulo-1.10.2-bin.tar.gz', 'https://mirrors.tuna.tsinghua.edu.cn/apache/accumulo/2.1.0/accumulo-2.1.0-bin.tar.gz', 'https://mirrors.tuna.tsinghua.edu.cn/apache/activemq/5.16.5/apache-activemq-5.16.5-bin.zip']def get_content(url): print("正在获取:", url) # get方法是一个阻塞的方法 resp = requests.get(url, headers=headers) if resp.status_code == 200: return resp.contentdef parse_content(content): print("响应数据的长度为:", len(content))start_time = time.time()# 实例化一个线程池对象pool = Pool(3)# 将列表中的每一个列表元素传递给get_content中进行处理。pool.map(get_content, urls)end_time = time.time()print('%d second'% (end_time-start_time))pool.close()pool.join()

python高性能异步爬虫_线程池_02

线程池的应用:

from multiprocessing.dummy import Poolurls = [ 'https://mirrors.tuna.tsinghua.edu.cn/apache/accumulo/1.10.2/accumulo-1.10.2-bin.tar.gz', 'https://mirrors.tuna.tsinghua.edu.cn/apache/accumulo/2.1.0/accumulo-2.1.0-bin.tar.gz', 'https://mirrors.tuna.tsinghua.edu.cn/apache/activemq/5.16.5/apache-activemq-5.16.5-bin.zip']start_time = time.time()# 实例化一个线程池对象pool = Pool(3)# 将列表中的每一个列表元素传递给get_content中进行处理。pool.map(get_content, urls)end_time = time.time()print('%d second'% (end_time-start_time))pool.close()pool.join()

【转自:美国高防站群服务器 http://www.558idc.com/mggfzq.html 复制请保留原URL】
网友评论