超简单,带你学会多线程爬虫

点击上方“AI派”,选择“设为星标

最新分享,第一时间送达!

640?wx_fmt=jpeg

640?wx_fmt=gif

作者:Tango,目前就职在一家对日开发的的IT服务公司。不是科班出身的我,出于对编程的热爱,自学了软件开发。从此深深陷入在代码的世界而无法自拔。

编辑:王老湿

我们的《从零开始学爬虫》专栏发布后,目前已经更新了四篇:

  1. 想学爬虫但不会?那就先跟着我来学习下Python吧!

  2. 爬虫学习者必须要懂的爬虫原理与页面构造

  3. 相见不恨晚,我们的第一个爬虫讲解终于要来了!

  4. 强势来袭,Python爬虫之正则表达式!

今天我们来介绍了一些爬虫的技术,实现基本的抓取需求。但是随着数据量变大时,我们之前的爬虫的效率或者说执行速度就会出现问题,之前我们都是一条数据爬取完成后才继续下一条数据的爬取,这种模式我们通常称它为单线程或者串行爬虫。那么该如何改善呢?通过本章的学习你将掌握以下内容:

  •  多线程:了解多线程的基本概念

  •  多进程:了解多进程的概念

  •  性能对比:通过一个爬虫案例对比它们之间的性能

  •  多进程的使用

多线程与多进程

1. 多线程和多进程概述

当计算机运行程序时,就会创建包含代码和状态的进程。这些进程会通过计算机的一个或多个CPU执行。不过,同一时刻每个CPU只会执行一个进程,然后不同进程间快速切换,给我们一种错觉,感觉好像多个程序在同时进行。

一个进程中,程序的执行也是在不同的线程间进行切换,每个线程执行程序的不同部分。

例如:有一个大型工厂,该工厂负责生产电脑,工厂有很多的车间用来生产不同的电脑部件。每个车间又有很多工人互相合作共享资源来生产某个电脑部件。这里的工厂相当于一个爬虫工程,每个车间相当于一个进程,每个工人就相当于线程。

2. 多进程的使用方法

我们这里为大家介绍的是Python中的multiprocessing库,使用方法如下:

 
   

3. 性能对比

我们这里以糗事百科的用户名称为例,分别对单进程,2进程,4进程的性能进行对比,代码如下:

import requests	
import re	
import time	
from multiprocessing import Pool	

	

	
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)\	
     AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}	

	
def spyder(url):	
    '''	
    解析页面	
    '''	
    res = requests.get(url, headers = headers)	
    ids = re.findall('<h2>(.*?)</h2>', res.text, re.S) # 获取用户名	
    time.sleep(1)	

	
if __name__ == "__main__":	
    urls = ["https://www.qiushibaike.com/text/page/{}/".format(str(i)) for i in range(1, 10)]	
    start_1 = time.time()	
    for url in urls:	
        spyder(url)        	
    end_1 = time.time()	
    print("单进程:",end_1 - start_1)	

	
    start_2 = time.time()	
    pool = Pool(processes = 2)	
    pool.map(spyder, urls)	
    end_2 = time.time()	
    print("2进程:",end_2 - start_2)	

	
    start_3 = time.time()	
    pool = Pool(processes = 4)	
    pool.map(spyder, urls)	
    end_3 = time.time()	
    print("2进程:",end_3 - start_3)

运行结果:

超简单,带你学会多线程爬虫_第1张图片

这里只是获取了用户名的信息,大家可以将其他信息也爬取出来看看,动手试试看看能缩少多少时间。好了这周的内容就这么多,虽然内容不是很多,但却很重要,大家要多多练习。

另外,我们成立了这个爬虫专栏的读者交流群,如果有问题欢迎大家在群里积极讨论。还没有加入的同学可以扫描下方的微信二维码,添加微信好友,之后统一邀请你加入交流群。添加好友时一定要备注:爬虫。 

640?wx_fmt=jpeg


/ 每日赠书专区 /

为了回馈一直以来支持我们的读者,“每日赠书专区”会每天从留言支持我们的读者中选择一名最脸熟的读者来赠予实体书籍(包邮),当前通过这种方式我们已赠送出 20+ 本书籍。

  1. 脸熟的评判标准是根据通过留言的次数来决定的

  2. 留言时需要按照今日留言主题来用心留言,否则不计入总数

  3. 每日赠书专区会出现在AI派当天发布文章的头条或次条的文章末尾

如果不理解头条/次条的含义的读者可看下面的图。

640?wx_fmt=jpeg

今天我们的每日赠书专区出现在“”的位置上,书籍为从零开始学Python网络爬虫

640?wx_fmt=jpeg

本书简介:

Python是数据分析的首要语言,而网络中的数据和信息很多,如何从中获取需要的数据和信息呢?最简单、直接的方法就是用爬虫技术来解决。

本书是一本教初学者学习如何爬取网络数据和信息的入门读物。书中不仅有Python的相关内容,而且还有数据处理和数据挖掘等方面的内容。本书内容非常实用,讲解时穿插了22个爬虫实战案例,可以大大提高读者的实际动手能力。

?↑↑点击上方可购买


恭喜上期通过留言成功混脸熟的读者:浪在学习里,赠送一本《Tensorflow+PyTorch深度学习从算法到实战

请中奖同学联系小编:wanglaoshi201907

超简单,带你学会多线程爬虫_第2张图片

/ 今日留言主题 /

你还想学爬虫什么知识呢?

近期专栏推荐

1. 算法原理稳如狗,工程落地慌得很!AI炼丹炉实践指南来啦~

2. 从0到1,数据分析师修炼之路

3. "王老湿,我。。我想学那个。。爬虫。可以嘛"

4. 想学机器学习吗?带坑的那种

640?wx_fmt=png

点下「在看」,给文章盖个戳吧!

你可能感兴趣的:(超简单,带你学会多线程爬虫)