• PHP 多线程采集


    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.   
    33.     while ($active && $mrc == CURLM_OK) {  
    34.         if (curl_multi_select($handle) != -1) {  
    35.             usleep(100);  
    36.         }  
    37.         do {  
    38.             $mrc = curl_multi_exec($handle, $active);  
    39.         } while ($mrc == CURLM_CALL_MULTI_PERFORM);  
    40.     }   
    41.   
    42.     foreach ($curl as $k => $v) {  
    43.         if (curl_error($curl[$k]) == "") {  
    44.             $text[$k] = (string) curl_multi_getcontent($curl[$k]);   
    45.         }  
    46.         curl_multi_remove_handle($handle, $curl[$k]);  
    47.         curl_close($curl[$k]);  
    48.     }   
    49.     curl_multi_close($handle);  
    50.     return $text;  
    51. }  
    52. $urls=array('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.             'http://www.baidu.com',  
    59.             'http://www.baidu.com'  
    60.             );  
    61. $res=curl_multi($urls);  
    62. print_r($res);  
  • 相关阅读:
    cnBlog_博客样式美化记录
    Python_Collections 模块_defaultdict类
    TAB 补全
    Python_Counter模块
    Python中__init__的学习使用
    Python高阶函数或仿函数
    Spring Security + Redis + JWT 实现动态权限管理【前后端分离】
    SpringBoot集成Jwt(详细步骤+图解)
    springboot+springsecurity项目
    SpringBoot+SpringSecurity+JWT整合实现单点登录SSO史上最全详解
  • 原文地址:https://www.cnblogs.com/wenxinphp/p/8556841.html
Copyright © 2020-2023  润新知