Python爬虫入门——3.1 多进程爬虫

我们上次爬取了斗破苍穹全文小说,并保存到本地TXT文件,但是下载速度超级慢(不排除我这垃圾i5电脑的原因),我都玩了一盘王者荣耀,还没有下载完成。j究其原因是我们只是应用了单进程爬取,所以爬取速度大打折扣。鉴于此我们本节介绍多进程爬虫。

首先简单介绍一下多进程。通常我们的计算机在运行程序时,他会自己创建一个包含代码和状态的进程。这些进程会通过计算机的一个或者多个CPU执行,不过同一时刻一个CPU只能执行一个进程,但是不同的进程可以在同一条时间线上来回切换,由于计算机超高的运行速度,给我们的感觉就是他在执行多个程序。同理,同一个进程里的不同线程之间也是如此。

首先来介绍多进程的使用方法

from multiprocessing import Pool
pool = Pool(processes = 4)
pool.map(func, urls)

首先要导入需要使用的库;第二行用于创建进程池,processes参数设置进程的个数;第三行利用map()函数运行进程,func参数是需要调用的def模块,urls为可迭代的URL列表。 

下面为主程序

import requests
import re
from multiprocessing import Pool

def Solution(url):
    '''
    爬取网页的函数,将爬取到的数据,存储到TXT文档
    :param url: 传入的url
    :return: 无返回值
    '''
    res = requests.get(url)
    name_list = re.findall('<h2>(.*?)</h2>',res.text,re.S)
    content_list = re.findall('<span>(.*?)</span>',res.text,re.S)
    for name, content in zip(name_list, content_list):
        return [name.strip(),'  ',content.strip(),'\n']


if __name__ == "__main__":
    urls = ['https://www.qiushibaike.com/text/page/{}/'.format(str(i)) for i in range(1,25)]
    pool = Pool(processes=4)
    with open('F:/exercise/多进程测试.txt', 'a') as f:
        for i in pool.map(Solution, urls):
                f.write(str(i))


1.首先导入需要用到的库

2.创建一个def,利用requests获取网页信息,利用正则表达式获取用户姓名,发表文章内容,再利用for循环,以列表形式返回我们获取到的内容

3.主函数:创建可迭代的url列表。创建进程池,数量为四个。

     3.1利用  with  创建一个对话。在这个对话里面,以追加 ‘ a ’ 的方式利用for循环将Solution函数返回的内容写入TXT文件。如果利用的是 ‘w' 模式,那么每次新写入的内容都会覆盖原先的内容,而追加 ’a' 则是在后面追加需要添加的内容。

你可以更换为‘w’ 模式试一下

--------------------------------------分割线------------------------------------------------------

关于python多进程的相关知识请参考为另一篇博文python 多进程

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值