龙空技术网

python爬虫实现多进程同步异步并发高效的爬取网页信息

PHM小知 485

前言:

当前小伙伴们对“python多进程爬虫”可能比较注意,姐妹们都想要学习一些“python多进程爬虫”的相关文章。那么小编在网摘上搜集了一些对于“python多进程爬虫””的相关资讯,希望兄弟们能喜欢,小伙伴们快快来了解一下吧!

为什么要用到多进程爬虫呢?从字面上看就知道,多进程的创建,应用在爬虫中主要目的是提高爬取的效率,实现秒爬。

python多进程中有几种进程模块,这里我们挑选Pool进程池来讲解。为什么要使用Pool进程池呢?因为要启动大量的子进程,用进程池的方式可以批量创建子进程,效率高。

下面将要讲解关于进程中所有常用的方法,主要有三种:

第一种:进程池普通模式

第二种:进程池同步模式

第二种:进程池异步模式

下面上干货了:

1.导入模块

import os  import time import requests from lxml import etreefrom multiprocessing import Pool #导入进程池模块

2.创建的子进程函数:

子进程函数,child_process

 def child_process(page): url = '' + str(page) + '/' # 设置头文件 header = {'User-Agent':'Mozilla/5.0'} # print('测试3--') response = requests.get(url,headers=header ) # print(response)

获取网址源代码

 html = response.text

创建etr对象,是为了提取网页中的信息为我们所用

 etr = etree.HTML(html)

提取用户名和搞笑数,用xpath的匹配方法

 titles = etr.xpath('//h2/text()') # print('第',page,'页',titles) happy = etr.xpath('//span[@class="stats-vote"]/i/text()') # print('第',page,'页',happy)

这里是通过遍历获取用户的数量

 x = 0 for k in range(len(titles)): # z注意是为了获取这一页几个用户 x += 1 # print(x)

这里为了容易分析,每一页只输出2个用户

 for k in range(2): print("子进程开始执行>>> pid={},ppid={},当下时间:{}".format(os.getpid(), os.getppid(), time.ctime())) print('#'*10,'第',page,'页-第',k+1,'个用户','#'*10) # 输出用户名和搞笑数 print('【用户名】:',titles[k],'【搞笑数】:',happy[k])

休眠2秒

 time.sleep(2) print("子进程终止>>> pid={},ppid={},编号{}".format(os.getpid(), os.getppid(), page)) print('子进程结束--')

3.主进程(重点内容:多进程的核心都在这里)

通过遍历创建一个个进程,放进进程池中

if __name__ == '__main__': pool = Pool(3)

这里通过遍历爬取5页的网页内容

 for i in range(1,6):

第一种爬取方法:多进程普通模式

 pool.map(func=child_process,iterable=(i,)) # 或者 pool.map(child_process, (i,)) 这种也对

第二种爬取方法:多进程同步模式

 # pool.apply(func=child_process,args=(i,))

第三种爬取方法:多进程异步模式

 # pool.apply_async(func=child_process,args=(i,))

关闭进程池,停止接受其它进程

 pool.close()

join()很常用且重要。zuoy主进程阻塞等待子进程安全退出,父子进程同步

 pool.join()

print("主进程终止")

提示:需要源代码的朋友,留言发给你

4.输出结果为:(部分结果)

子进程开始执行>>> pid=4928,ppid=11056,当下时间:Wed Oct 10 21:17:44 2018########## 第 1 页-第 1 个用户 ##########【用户名】: 教蚂蚁掐死大象 【搞笑数】: 420子进程开始执行>>> pid=4928,ppid=11056,当下时间:Wed Oct 10 21:17:44 2018########## 第 1 页-第 2 个用户 ##########

标签: #python多进程爬虫