数据挖掘_多进程抓取

之前说过Python的多线程只能运行在一个单核上,也就是各线程是以并发的方式异步执行的

这篇文章我们来聊聊Python多进程的方式

多进程依赖于所在机器的处理器个数,在多核机器上进行多进程编程时,各核上运行的进程之间是并行执行的,可以利用进程池,是每一个内核上运行一个进程,当翅中的进程数量大于内核总数时,待运行的进程会等待,直至其他进程运行完毕让出内核

多进程就相当于下面这种卖票的行为

在这里要注意,当系统内只有一个单核CPU是,多进程并不会发生,此时各进程会依次占用CPU运行至完成

我们可以通过Python的语句会的CPU可用的核数,如下图

为了形成比较,我们还是使用之前的那个例子,当当图书,搜索关键字商品信息的抓取

首先写出多进程主方法

# coding=utf-8
__Author__ = "susmote"

from multi_threading import mining_func
import multiprocessing
import time

def multiple_process_test():
    start_time = time.time()
    page_range_list = [
        (1, 10),
        (11, 20),
        (21, 32),
    ]
    pool = multiprocessing.Pool(processes=3)
    for page_range in page_range_list:
        pool.apply_async(mining_func.get_urls_in_pages, (page_range[0], page_range[1]))

    pool.close()
    pool.join()
    end_time = time.time()
    print("抓取时间:", end_time - start_time)
    return end_time - start_time

  在这里面,我简单解释一下有关多进程的操作

pool被定义为可同时并行3个进程的进程池,然后通过循环,使用apply_async方法使进入进程池的进程以异步的方式并行运行

下面是主函数

# coding=utf-8
__Author__ = "susmote"

from process_func import multiple_process_test

if __name__ == "__main__":
    pt = multiple_process_test()
    print("pt : ", pt)

  

把代码运行起来,得到如下结果

5.908

再运行一次

3.954

最后一次

4.163

取平均时间

4.341秒

这时我们再回顾上篇文章多线程的情况(同样网络条件下):

多线程

单线程

可以看到,差距非常明显,多进程占绝大优势

多进程就是这些,你也可以找一个更大的数据池,去试验这些方法

原文地址:https://www.cnblogs.com/susmote/p/8975597.html

时间: 2024-10-10 22:55:32

数据挖掘_多进程抓取的相关文章

数据挖掘_多线程抓取

在这一篇文章中,我们主要来介绍多线程抓取数据. 多线程是以并发的方式执行的,在这里要注意,Python的多线程程序只能运行在一个单核上以并发的方式运行,即便是多核的机器,所以说,使用多线程抓取可以极大地提高抓取效率 下面我们以requests为例介绍多线程抓取,然后在通过与单线程程序比较,体会多线程的效率的提高 这一次,我就不用我的网站做测试了,因为网站的内容此时还并不是太多,不能体现多线程的优势 我们通过当当网来测试我们的多线程实例,通过对搜索结果的同一抓取实现功能的演示,搜索模式地址如下 h

PHP多进程编程(3):多进程抓取网页的演示

我们知道,从父进程到子经常的数据传递相对比较容易一些,但是从子进程传递到父进程就比较的困难. 有很多办法实现进程交互,在php中比较方便的是 管道通信.当然,还可以通过 socket_pair 进行通信. 首先是服务器为了应对每一个请求要做的事情(发送一个url 序列,url序列用t 分割.而结束标记是 n) function clientHandle($msgsock, $obj) { $nbuf = ''; socket_set_block($msgsock); do { if (false

【最新原创】中国移动(中国联通)_通信账单,详单,个人信息抓取爬虫代码

概要: 1.因为公司需要,就花了一点时间写了一下三大运营商通信数据的抓取,涉及到Web上你所看得到的一切数据. 代码没啥技术含量,重点在于抓包分析过程.期间遇到了很多未知的困难,都一一克服了. 2.由于抓取数据的隐私性,我们的抓包是假设在用户已知自己数据被抓取,并且同意告知短信验证码的情况下进行的, 不属于黑客范畴! 3.整个过程,包括重建数据库表结构,解析json等如同逆向运营商的数据库一般.总体来说,三大运营商更新频率不算频繁,还算较稳定,数据结构,网页结构等都不会做很大的变动. 整体效果如

实现多进程爬虫的数据抓取

要实现多进程爬虫的数据抓取,要用到库multiprocessing并导入Pool: from multiprocessing import Pool 接着导入进程池 pool = Pool(processes = 4) #processes后接打开进程的数,与电脑核数有关,不加即自动分配.pool.map(get_all_links_from,channel_list.split()) 所有的程序会被放到进程池Pool()中并分配CPU. 此处用到了map函数,map函数会根据提供的函数对指定序

爬虫_快速构建实时抓取集群

定义: 首先,我们定义一下定向抓取,定向抓取是一种特定的抓取需求,目标站点是已知的,站点的页面是已知的.本文的介绍里面,主要是侧重于如何快速构建一个实时的抓取系统,并不包含通用意义上的比如链接分析,站点发现等等特性. 在本文提到的实例系统里面,主要用到linux+mysql+redis+django+scrapy+webkit,其中scrapy+webkit作为抓取端,redis作为链接库存储,mysql作为网页信息存储,django作为爬虫管理界面,快速实现分布式抓取系统的原型. 名词解析:

为何大量网站不能抓取?爬虫突破封禁的6种常见方法

在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于用“网络数据采集”,有时会把网络数据采集程序称为网络机器人(bots).最常用的方法是写一个自动化程序向网络服务器请求数据(通常是用 HTML 表单或其他网页文件),然后对数据进行解析,提取需要的信息. 本文假定读者已经了解如何用代码来抓取一个远程的 URL,并具备表单如何提交及 JavaScript 在浏览器如何运行的机制.想更多了解网络数据采集基础知识,可以参考文后的资料. 在采集网站的时会遇到一些比

java抓取动态生成的网页

最近在做项目的时候有一个需求:从网页面抓取数据,要求是首先抓取整个网页的html源码(后期更新要使用到).刚开始一看这个简单,然后就稀里哗啦的敲起了代码(在这之前使用过Hadoop平台的分布式爬虫框架Nutch,使用起来是很方便,但是最后因为速度的原因放弃了,但生成的统计信息在后来的抓取中使用到了),很快holder.html和finance.html页面成功下载完成,然后解析完holder.html页面之后再解析finance.html,然后很沮丧的发现在这个页面中我需要的数据并没有在html

python自然语言处理1——从网络抓取数据

python自然语言处理1--从网络抓取数据 写在前面 本节学习python2.7 BeautifulSoup库从网络抽取数据的技术,检验之简而言之就是爬虫技术.网络编程是一门复杂的技术,在需要基础的地方,文中给出的链接地址,都是很好的教程,可以参考,我在这里不在重复发明轮子.本节的主旨在于: 帮助快速掌握基本爬虫技术,形成一条主线,能为自己的实验构造基础数据.掌握爬虫技术后,可以从网络抓取符合特定需求的数据供分析,这里学习的爬虫技术适用于数据挖掘.自然语言处理等需要从外部挖掘数据的学科. 1.

[python]初试页面抓取——抓取沪深股市交易龙虎榜数据

[python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import gzipimport http.cookiejar import urllib.request import urllib.parse import json import os import time import datetime def getOpener(head): # deal with