多进程爬虫——multiprocessing库

multiprocessing库是Python自带的多进程处理库,在使用多进程爬虫时时,使用方法如下:

from multiprocessing import Pool
pool = Pool(processes=2)        #创建进程池,进程数为2

pool.map(func, iterable[,chunksize])    #执行多进程,其中func是需运行的爬虫函数,iterable为迭代参数,在爬虫中可为多个URL列表进行迭代。

pool.close() 
pool.join()   #结束进程

以爬取糗事百科文字为例,对比一下单进程和多进程的效率:

import time,re
from lxml import etree
import requests
from multiprocessing import Pool

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 \
(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

def re_scraper(url):
    r = requests.get(url, headers=headers)
    selector = etree.HTML(r.text)
    infos = selector.xpath('//div[@id="content-left"]/div') #取大标签,从此处循环
    for info in infos:
        try:
            userId = info.xpath('div[1]/a[2]/h2/text()')[0]
        except IndexError:
            userId = '匿名用户'
        content = info.xpath('a/div/span/text()')[0]
        laugh = info.xpath('div[2]/span[1]/i/text()')[0] + '好笑'
        comment = info.xpath('div[2]/span[2]/a/i/text()')[0] + '评论'
    return url*2
    pass

if __name__ == '__main__':      #windows环境下必须有这句,否则多进程不起效
    urls = ['https://www.qiushibaike.com/text/page/{}/'\
            .format(str(i)) for i in range(1,36)]
    start_1 = time.time()
    for url in urls:
        re_scraper(url)    #单进程
    end_1 = time.time()
    print('单进程爬虫用时:',end_1-start_1)
    start_2 = time.time()
    pool = Pool(processes=2)    #2个进程
    pool.map(re_scraper, urls)
    end_2 = time.time()
    print('2进程爬虫用时:', end_2-start_2)
    start_3 = time.time()
    pool = Pool(4)          #4个进程
    pool.map(re_scraper, urls)
    end_3 = time.time()
    print('4进程爬虫用时:', end_3-start_3)
image

多进程在爬取数据量较大时优势很明显,数据量小时可用可不用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,938评论 2 89
  • 学习爬虫有一段时间了,期间接触了很多相关的库,不禁感慨Python就是强大,当你遇到任何问题的时候基本上都有前人造...
    HomerX阅读 7,811评论 0 13
  • 1 前言 作为一名合格的数据分析师,其完整的技术知识体系必须贯穿数据获取、数据存储、数据提取、数据分析、数据挖掘、...
    whenif阅读 18,073评论 45 523
  • 必备的理论基础 1.操作系统作用: 隐藏丑陋复杂的硬件接口,提供良好的抽象接口。 管理调度进程,并将多个进程对硬件...
    drfung阅读 3,541评论 0 5
  • 几天前看到的那本书,似乎一直在潜意识里指引我,我想要挑战自己,我想要做别人做不到的事情,而且,一旦我想要做什么...
    oh看那遥远的地方阅读 197评论 0 0