1. function curl_multi($urls) {
  2. if (!is_array($urls) or count($urls) == 0) {
  3. return false;
  4. }
  5. $num=count($urls);
  6. $curl = $curl2 = $text = array();
  7. $handle = curl_multi_init();
  8. function createCh($url) {
  9. $ch = curl_init();
  10. curl_setopt ($ch, CURLOPT_URL, $url);
  11. curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko');//设置头部
  12. curl_setopt ($ch, CURLOPT_REFERER, $url); //设置来源
  13. curl_setopt ($ch, CURLOPT_ENCODING, "gzip"); // 编码压缩
  14. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  15. curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);//是否采集301、302之后的页面
  16. curl_setopt ($ch, CURLOPT_MAXREDIRS, 5);//查找次数,防止查找太深
  17. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
  18. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
  19. curl_setopt ($ch, CURLOPT_TIMEOUT, 20);
  20. curl_setopt ($ch, CURLOPT_HEADER, 0);//输出头部
  21. return $ch;
  22. }
  23. foreach($urls as $k=>$v){
  24. $url=$urls[$k];
  25. $curl[$k] = createCh($url);
  26. curl_multi_add_handle ($handle,$curl[$k]);
  27. }
  28. $active = null;
  29. do {
  30. $mrc = curl_multi_exec($handle, $active);
  31. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  32. while ($active && $mrc == CURLM_OK) {
  33. if (curl_multi_select($handle) != -1) {
  34. usleep(100);
  35. }
  36. do {
  37. $mrc = curl_multi_exec($handle, $active);
  38. } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  39. }
  40. foreach ($curl as $k => $v) {
  41. if (curl_error($curl[$k]) == "") {
  42. $text[$k] = (string) curl_multi_getcontent($curl[$k]);
  43. }
  44. curl_multi_remove_handle($handle, $curl[$k]);
  45. curl_close($curl[$k]);
  46. }
  47. curl_multi_close($handle);
  48. return $text;
  49. }
  50. $urls=array('http://www.baidu.com',
  51. 'http://www.baidu.com',
  52. 'http://www.baidu.com',
  53. 'http://www.baidu.com',
  54. 'http://www.baidu.com',
  55. 'http://www.baidu.com',
  56. 'http://www.baidu.com',
  57. 'http://www.baidu.com'
  58. );
  59. $res=curl_multi($urls);
  60. print_r($res);

PHP 多线程采集的更多相关文章

  1. Python多线程采集百度相关搜索关键词

    百度相关搜索关键词抓取,读取txt关键词,导出txt关键词 #百度相关搜索关键词抓取,读取txt关键词,导出txt关键词   # -*- coding=utf-8 -*- import request ...

  2. python3 多线程 采集 xpath

    #!/usr/bin/python # -*- coding: UTF-8 -*- '''Thread3 多线程测试采集''' import threading,time,queue,Mongo_ut ...

  3. python多线程采集

    import requests import json import threading Default_Header = { #具体请求头自己去弄 } _session=requests.sessi ...

  4. PHP使用CURL_MULTI实现多线程采集

    $connomains = array( "http://www.baidu.com/", "http://www.hao123.com/", "ht ...

  5. python多线程采集图片

    cmd中运行 >python untitled2.py    图片的网站 import requests import threading from bs4 import BeautifulSo ...

  6. PHP cURL应用实现模拟登录与采集使用方法详解

    对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...

  7. 多线程实际运用<第七篇>

    1.单线程采集100个页面 class Program { static int i = 6991275; static void Main(string[] args) { Stopwatch sw ...

  8. PHP cURL实现模拟登录与采集使用方法详解教程

    来源:http://www.zjmainstay.cn/php-curl 本文将通过案例,整合浏览器工具与PHP程序,教你如何让数据 唾手可得 . 对于做过数据采集的人来说,cURL一定不会陌生.虽然 ...

  9. 转载 多线程实际运用<第七篇>

    多线程实际运用<第七篇> 1.单线程采集100个页面 class Program { static int i = 6991275; static void Main(string[] a ...

随机推荐

  1. oracle的分号和斜杠/

    ;是执行语句必须的/是执行语句块必须的 比如执行一个触发器 CREATE OR REPLACE TRIGGER "TRG_1" BEFORE INSERT ON "CAT ...

  2. PHP版本的讲解

    原文地址:http://dev.meettea.com/show-90-1.html 最近发现很多PHP程序员对PHP版本知识了解不是很清楚,其中不乏PHP产品主力开发人员. PHP版本主要分三支:P ...

  3. [network]RIP协议

    水平分割:一种避免路由环路的出现和加快路由汇聚的技术. 原理:路由器从某个接口接收到的更新信息不允许再从这个接口发送回去. 优点:1. 阻止路由环路产生:2. 减少路由器更新信息占用的链路带宽资源. ...

  4. xshell—实现Linux与Windows之间的文件传递

    在Windows系统上,通过xshell连接Linux系统. 第一种使用方式:从Linux系统上下载文件到Windows系统. 准备工作: $ sudo apt-get install lrzsz 安 ...

  5. 论文笔记:DeepFace: Closing the Gap to Human-Level Performance in Face Verification

    2014 CVPR Facebook AI研究院 简单介绍 人脸识别中,通常经过四个步骤,检测,对齐(校正),表示,分类 论文主要阐述了在对齐和表示这两个步骤上提出了新的方法,模型的表现超越了前人的工 ...

  6. mongoDB操作2

    一.find操作 MongoDB中使用find来进行查询,通过指定find的第一个参数可以实现全部和部分查询. 1.查询全部 空的查询文档{}会匹配集合的全部内容.如果不指定查询文档,默认就是{}. ...

  7. angularjs工作原理解析

    个人觉得,要很好的理解AngularJS的运行机制,才能尽可能避免掉到坑里面去.在这篇文章中,我将根据网上的资料和自己的理解对AngularJS的在启动后,每一步都做了些什么,做一个比较清楚详细的解析 ...

  8. Scrum立会报告+燃尽图(十月二十三日总第十四次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...

  9. Swing State: Consistent Updates for Stateful and Programmable Data Planes

    Swing State: Consistent Updates for Stateful and Programmable Data Planes 年份:2017 来源:ACM 本篇论文解决的问题 B ...

  10. 运维学习笔记(三)之T01-03TCP/IP

    TCP/IP协议 简介 通信协议 信息从源传递到目的地的过程中,网络上各设备需要通信,描述网络通信“语言”的规范就是协议. 数据通信协议 决定数据的格式和传输的一组规则. TCP/IP协议简介 一组通 ...