Парсер и чекалка проксей!

Discussion in 'PHP' started by DIAgen, 2 May 2007.

  1. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    Пишу скрипт по парсеру и чекалке проксей, накатал быстро скрипт, только он гад такой работает сильно долго... Если кто-нибудь сможет переделать его и увеличить буду очень блогодарен. Срочно нужно....
    PHP:
    <?php

    set_time_limit
    (0);

    $fp fsockopen("proxy.shternov.ru"80$errno$errstr30);
    if (
    $fp)
    {
        
    $out "GET / HTTP/1.1\r\n";
        
    $out .= "Host: proxy.shternov.ru\r\n";
        
    $out .= "Connection: Close\r\n\r\n";

        
    fwrite($fp$out);

        
    $fgets         =    '';
        
    $content     =    '';


        while(!
    feof($fp))
        {
            
    $content .=    fread($fp,8192);
        }

        
    fclose($fp);


        
    preg_match_all ("#(bgcolor=\#FFFFFF><td>)(.*?)(<\/td><td>)(.*?)(<\/td><td title=)#si"$content$matche1);

        
    $count_proxy count($matche1[2]);

        for (
    $i 0$i <= $count_proxy$i++)
        {

            
    $fp fsockopen($matche1[2][$i], $matche1[4][$i], $errno$errstr30);

            if (
    $fp)
            {

                
    $out "GET http://www.ya.ru/ HTTP/1.1\r\n";
                
    $out .= "Host: ya.ru\r\n";
                
    $out .= "Connection: Close\r\n\r\n";

                
    fwrite($fp$out);

                
    $fgets         =    '';
                
    $content     =    '';


                while(!
    feof($fp))
                {
                    
    $content .=    fread($fp,8192);
                }

                
    fclose($fp);
                
    preg_match_all ("#(<title>)(.*?)(<\/title>)#si"$content$matche1);

                if(
    $matche1['2']['0'] == 'Яndex')
                {
                
                
    //    echo "$matche1[2][$i]:$matche1[4][$i]<br>".flush();

                    
    $file fopen ("proxy/proxy.txt","a+");
                    
    $str "$matche1[2][$i]:$matche1[4][$i]\n";
                    if ( 
    $file )
                    {
                        
    fputs $file$str);
                    }
                    
    fclose ($file);
                }
            }
        }
    }
    ?>
     
  2. Slon

    Slon Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    123
    Likes Received:
    21
    Reputations:
    3
    http://forum.aoh.name//index.php?act=ST&f=22&t=121&st=0

    Многопоточная чекалка проксей от AOH

    Работает как по списку проксей так и по диапозону
    Тестировпалась в nix осях. В винде работает немного дольше
     
    #2 Slon, 2 May 2007
    Last edited: 2 May 2007
  3. KSURi

    KSURi tnega AOLPS

    Joined:
    6 Jun 2006
    Messages:
    458
    Likes Received:
    219
    Reputations:
    357
    2Slon
    Он вообще-то на Perl написан, а там интерфейс для создания потоков есть, в отличие от PHP. Про "переделку в cgi": сотри и подумай, что написал.

    2DIAgen
    Погугли на тему "пул неблокирующих сокетов"
     
  4. +toxa+

    +toxa+ Smack! SMACK!!!

    Joined:
    16 Jan 2005
    Messages:
    1,674
    Likes Received:
    1,028
    Reputations:
    1,228
    http://helllabs.net/
     
    _________________________
  5. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    Тоха мне надо что бы скрипт лежал на серваке и все сам делал через крон...
     
  6. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    Не советоал бы чекер делать на пхп) скорость не ахти )
     
  7. DIAgen

    DIAgen Banned Life!

    Joined:
    2 May 2006
    Messages:
    1,055
    Likes Received:
    374
    Reputations:
    460
    По идеи мне скорость не нужна, просто мне нужны живые прокся, и проверка будет идти раз в сутки и все, сейчас буду разбераться, может что-нибудь смого придумать....
     
  8. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    PHP:
     $fp fsockopen($matche1[2][$i], $matche1[4][$i], $errno$errstr30);
    Лимит времени поставь меньше, есле прокся мертвая незачем 30 секунд ждать. достаточно 3

    PHP:
    while(!feof($fp))
                {
                    
    $content .=    fread($fp,8192);
                }

     
    preg_match_all ("#(<title>)(.*?)(<\/title>)#si"$content$matche1);

                if(
    $matche1['2']['0'] == 'Яndex'
    а не проще ли проверять номер статуса страницы? 200 OK

    и тогда не обязательно всю страницу грузить! достаточно загрузить первую строку.

    PHP:
    if(strstr(fgets($fp),'200 OK'))
     .....
     
    #8 nc.STRIEM, 3 May 2007
    Last edited: 3 May 2007