Многопоточный парсер прокси

Тема в разделе "Программное обеспечение", создана пользователем stargazerrrrr, 14 ноя 2010.

  1. stargazerrrrr

    stargazerrrrr New Member

    Регистр.:
    5 сен 2010
    Сообщения:
    130
    Симпатии:
    0
    PHP:
    <?php
    /*Вот скрипт парсинга прокси (в формате ххх.ххх.ххх.ххх:ххх).
    Парсит в 25 потоков, оставляет уникальные, сохраняет в proxy.txt. Урлы берет из proxy-list.txt(урл на строку).
    Насчет парсинга 1К источников - думаю будет долго, если не умрет вообще , потестируй. 
    */
    set_time_limit(0);

    function 
    multi_take_html($array_urls$timeout 50)
    {
    $multi_handle null;
    $curl_handles = array();

    // инициализируем curl_multi
    $multi_handle curl_multi_init();

    // добавляем url'ы с параметрами
    foreach($array_urls as $key => $url) {
        
    // список curl-обработчиков
        
    $curl_handles[$key] = curl_init($url);
        
    // создаем массив с опциями
        
    $options = array (CURLOPT_TIMEOUT => $timeout,
                        
    CURLOPT_USERAGENT => 'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.6) Firefox/3.0.6 (.NET CLR 3.5.30729)',
                        
    CURLOPT_HEADER => TRUE,
                        
    CURLOPT_FOLLOWLOCATION => TRUE,
                        
    CURLOPT_RETURNTRANSFER => TRUE,
                        
    CURLOPT_HTTPHEADER => array('Expect:'),
                        
    CURLOPT_REFERER => 'http://www.mrhinkydink.com/proxies.htm');
        
    // и применяем к нашим обработчикам
        
    curl_setopt_array($curl_handles[$key], $options);
        
    // добавляем обработчик в curl_multi 5447078-71
        
    curl_multi_add_handle($multi_handle$curl_handles[$key]);
    }

    // выполняем
    do { curl_multi_exec($multi_handle$running);
    } while (
    $running 0);
    $result '';
    for (
    $n 0$n count($array_urls); $n++){
        
    $result .= curl_multi_getcontent($curl_handles[$n]);
    }

    // освобождаем ресурсы
    foreach ($array_urls as $key => $url) {
        
    curl_multi_remove_handle($multi_handle,$curl_handles[$key]);
        
    curl_close($curl_handles[$key]);
    }
    curl_multi_close($multi_handle);

    return 
    $result;
    }

    ////End function
    $test_page '';
    if (
    file_exists('proxy.txt'))
    {
        
    $test_page .= str_replace("\r\n",' <br />',file_get_contents('proxy.txt'));
        
    unlink('proxy.txt');
    }
    if (
    file_exists('good-proxy.txt')) unlink('good-proxy.txt');
    if (
    file_exists('bad-proxy.txt')) unlink('bad-proxy.txt');
    //echo $test_page; exit('   Stop!');

    $proxy_list file('proxy-list.txt');

    for (
    $il 0$il count($proxy_list); $il++)
    {
        
    $proxy_list_arr[$il] = trim($proxy_list[$il]);
    }
    if (
    count($proxy_list_arr) > 25)
    {
        
    $proxy_list_20 array_chunk($proxy_list_arr,25);    //разделяем массив c урлами на части по 25 значений;
    }else $proxy_list_20[0] = $proxy_list_arr;

    //print_r($proxy_list_20);
    //echo '<br>'.count($proxy_list_20); //exit('<br>!!!!!!!!Stop!!!!!!!!!!');

    for ($arr_part 0$arr_part count($proxy_list_20); $arr_part++)
    {
        
    $test_page .= multi_take_html($proxy_list_20[$arr_part]);
    }


    $test_page strip_tags(str_replace(array("\r\n","\r","\n","\n\r",' :    '),':',$test_page));
    $test_page str_replace(array('SI','PAZS',':      '),array('80','3128',':'),$test_page);
    //echo $test_page; exit('<br>stops');

    if (!strpos($test_page,':') === FALSE)
    {
        
    $test_page str_replace(':',':',$test_page);
    }

    echo 
    'Page Pars End!!!<br>';
    ob_flush();
    flush();

    //preg_match_all('/\d.+?\.\d.+?.\d.+?.\d.+?:(.*?)\D/',$test_page,$proxy_tmp_arr);
    preg_match_all('/\d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d?:\d\d?\d?\d?\d?/',$test_page,$proxy_tmp_arr);
    //print_r($proxy_tmp_arr); exit('Stop');

    for ($i 0$i count($proxy_tmp_arr[0]); $i++)
    {
        
    //$proxy_arr[$i] = substr($proxy_tmp_arr[0][$i],0,strpos($proxy_tmp_arr[0][$i],':')).':'.$proxy_tmp_arr[1][$i];
        
    $proxy_arr[$i] = $proxy_tmp_arr[0][$i];
    }
    $proxy_arr array_unique($proxy_arr);
    echo 
    count($proxy_arr).'<br>';
    //sort($proxy_arr);

    //print_r($proxy_arr);

    $handle fopen('proxy.txt','a');
    foreach (
    $proxy_arr as $keys)
    {
        
    fwrite($handle,$keys."\r\n");
    }
    fclose($handle);

    echo 
    'Done.<br>Proxy save in proxy.txt!';

    ?> 
     

Поделиться этой страницей