CURL多线程采集

set_time_limit(0);
    $dbConfig =array(
            ‘dbHost‘ => ‘localhost‘,
            ‘dbName‘ => ‘ymall‘,
            ‘dbUser‘ => ‘root‘,
            ‘dbPass‘ => ‘cinternet_245.‘,
      );
    $store_id=327;
    $ducpath=$_SERVER[‘DOCUMENT_ROOT‘].‘/‘;
    $caij="http://www.yimengbuy.com/";
    $conn=mysql_connect($dbConfig[‘dbHost‘],$dbConfig[‘dbUser‘],$dbConfig[‘dbPass‘],$dbConfig[‘dbName‘])or die(‘数据库连接失败‘);
    mysql_select_db($dbConfig[‘dbName‘],$conn) or die(‘数据库选择失败‘);
    mysql_query(‘set names \‘utf8\‘‘);
    $sql = "SELECT description FROM ecm_goods where store_id=$store_id  and  description like ‘%<img%‘";
    $query = mysql_query($sql);
    while($description= mysql_fetch_array($query))
    {
         preg_match_all(‘/<img(.*?)src="(.*?)"(.*?)>/i‘,$description[‘description‘],$conimg);
         foreach($conimg[2] as $keyimg=>$valimg)
         {

if (!stristr($valimg,‘http://‘))
             {
                if (!is_file($ducpath.$valimg))
                {    
                    $valimg=str_replace(‘\\‘,"/",$valimg);    
                    if ($valimg[‘0‘]==‘/‘)
                    {
                       $valimg=substr($valimg,1);
                    }
                    if ($valimg[‘0‘]==‘d‘)
                    {
                       $imgarray[$valimg]=$caij.$valimg;
                    }
                }
             }
         }
    }
$dataimg =Curl_http($imgarray,‘20‘);
ob_clean();
foreach ((array)$dataimg as $kk=>$vv)
{
    if($vv !=‘‘){
    file_put_contents($kk, $vv);
    }
    else
    {
       unset($kk,$vv);
    }
}
 function Curl_http($array,$timeout=‘15‘)
{
    $res = array();
    $mh = curl_multi_init();//创建多个curl语柄
    foreach($array as $k=>$url)
    {
        $conn[$k]=curl_init($url);//初始化
        curl_setopt($conn[$k], CURLOPT_TIMEOUT, $timeout);//设置超时时间
        curl_setopt($conn[$k], CURLOPT_USERAGENT, ‘Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)‘);
        curl_setopt($conn[$k], CURLOPT_MAXREDIRS, 7);//HTTp定向级别 ,7最高
        curl_setopt($conn[$k], CURLOPT_HEADER, false);//这里不要header,加块效率
        curl_setopt($conn[$k], CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
        curl_setopt($conn[$k], CURLOPT_RETURNTRANSFER,1);//要求结果为字符串且输出到屏幕上
        curl_setopt($conn[$k], CURLOPT_HTTPGET, true);
        curl_multi_add_handle ($mh,$conn[$k]);
    }

do
    {
        $mrc = curl_multi_exec($mh,$active);//当无数据,active=true
    }
    while ($mrc == CURLM_CALL_MULTI_PERFORM);//当正在接受数据时
    while ($active and $mrc == CURLM_OK)
    {//当无数据时或请求暂停时,active=true
        if (curl_multi_select($mh) != -1)
        {
            do {
              $mrc = curl_multi_exec($mh, $active);
            }
            while ($mrc == CURLM_CALL_MULTI_PERFORM);
        }
    }
    foreach ($array as $k => $url)
    {
        if(!curl_errno($conn[$k]))
        {
            $data[$k]=curl_multi_getcontent($conn[$k]);//数据转换为array
            $header[$k]=curl_getinfo($conn[$k]);//返回http头信息
            curl_close($conn[$k]);//关闭语柄
            curl_multi_remove_handle($mh , $conn[$k]); //释放资源
        }
        else
        {
            unset($k,$url);
        }
    }
    curl_multi_close($mh);
    return $data;
}

原文地址:https://www.cnblogs.com/zhangfu/p/10364612.html

时间: 2024-10-03 14:56:29

CURL多线程采集的相关文章

curl多线程下载类

<?php /** * curl多线程下载类 */class MultiHttpRequest{ public $urls = array (); private $res = array (); private $curlopt_header = 0; private $method = "GET"; private $curlopt = array (); public function __construct($urls = false, $curlopt = array

CURL 多线程问题

http://blog.csdn.net/wslz2001/article/details/12117127 默认情况下libcurl完成一个任务以后,出于重用连接的考虑不会马上关闭 如果没有新的TCP请求来重用这个连接,那么只能等到CLOSE_WAIT超时,这个时间默认在7200秒甚至更高,太多的CLOSE_WAIT连接会导致性能问题 解决方法: curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1); 最好再修改一下TCP参数调低CLOSE_WAIT和

php curl 多线程方法

<?php /* curl 多线程抓取 */ /** * curl 多线程 * * @param array $array 并行网址 * @param int $timeout 超时时间 * @return array */ function Curl_http($array,$timeout){ $res = array(); $mh = curl_multi_init();//创建多个curl语柄 $startime = getmicrotime(); foreach($array as $

PHP CURL 多线程 GET/POST 类

PHP CURL 多线程 GET/POST 类 2015-01-01 分类:技术文章 阅读(623) 评论(0) 如果有需要更正或更高效的建议,欢迎在OSchina分享~\(≧▽≦)/~ http://www.oschina.net/code/snippet_1475115_44902 <?php /**************************************************************** PHP CURL 多线程 GET/POST Email:[email

CMDB3 完善采集端代码(ssh方案的多线程采集), 异常处理, 服务端目录结构的设计(django的app), API数据分析比对入库

完善一下采集端代码 ssh方案的多线程采集 线程和进程,协程的区别 (90% 问到) 提高并发的话,使用多线程 python2 多进程有 多线程没有 python3 多进程有 多线程有 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor p = ThreadPoolExecutor(10) def test(i): time.sleep(1) print(i) for i in range(100): p.s

PHP - curl实现采集

1.开启curl支持 由于php环境安装后默认是没有打开curl支持的,需修改php.ini文件,找到;extension=php_curl.dll,把前面的冒号去掉,重启服务即可: 2.使用curl进行数据抓取 // 初始化一个 cURL 对象 $curl = curl_init(); // 设置你需要抓取的URL curl_setopt($curl, CURLOPT_URL, 'http://www.kugou.com/yy/html/special.html'); // 设置header

php curl 作采集时的一些参数设置

public function geturl($url){ $ip = "{rand(1, 255)}.{rand(1, 255)}.{rand(1, 255)}.{rand(1, 255)}"; // 初始化一个 cURL 对象 $curl = curl_init(); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gec

Python多线程采集数据示例:落网_音乐期刊

待采集的网站如下: http://www.luoo.net/ 采集的内容未该站点下的"音乐期刊"(#为对应的期刊序数,为正整数) http://www.luoo.net/music/# 原创爬虫的作者的github地址: https://github.com/imchenkun/ick-spider/blob/master/luoospider.py 具体参见这篇博文: http://www.cnblogs.com/chenkun/p/5653459.html 网上牛人给出的代码: 1

rolling_curl curl批量采集函数留份

摘自:http://www.searchtb.com/2012/06/rolling-curl-best-practices.html 1 function rolling_curl($urls, $delay=0) { 2 $queue = curl_multi_init(); 3 $map = array(); 4 5 foreach ($urls as $url) { 6 $ch = curl_init(); 7 8 curl_setopt($ch, CURLOPT_URL, $url);