Граббер для новичков

Тема в разделе "PHP", создана пользователем Css_Ufa, 5 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Css_Ufa

    Css_Ufa

    Регистр.:
    25 ноя 2008
    Сообщения:
    543
    Симпатии:
    323
    Всем привет. Вот сижу и делаю граббер. реализовал пока 1стадию, сграбил то что нужно мне...
    Вопрос на засыпку - как сделать обработку данных в граббере, к примеру у вас несколько десятков новостей на разных страницах и нужно сделать запрос к каждой из них... Вот сижу и читаю пока, если раньше ответ найдете пишите...
    Это будет интересно всем, кто хочет для начала написать свой граббер под себя...
    HTML:
    
    <?
    if(!($myFile=fopen("http://87.106.102.151/bet/index?$$QUERY_STRING","r"))) // Адресс донора
    { 
    echo "The news interface is down for maintenance."; 
    exit; 
    } 
    while(!feof($myFile)) 
    { 
    $myLine.=fgets($myFile,255); 
    } 
    fclose($myFile); 
    $start="<div>"; // Начало тега, с которого нужно взять инфу
    $end="</div>"; // конец тега
    $start_position=strpos($myLine, $start);  //обработка сайта с место начала тега
    $end_position=strpos($myLine, $end)+strlen($end); // конец обработки
    $length=$end_position-$start_position; // задается длина
    $myLine=substr($myLine, $start_position, $length); 
    // Display HTML 
    echo $myLine; // вывод страницы
    
    
    ?>
    <html>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="layout/styles/styles.css" /> //cтилистика сайта
    </html> 
    Стилистику просто скопировал с самого сайта, сделал папку и все. :)
    А конец и начала тега нужно для того чтобы тебе не весь сайт копирнуть, а только то что тебе необходимо... Вот пока все мои познания, надеюсь кто еще откликнется... :)
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    что-то я не понял

    у тебя есть код грабинга одной страницы, чего не хватает?

    бери список запросо и в цикле грабь контент
     
    Css_Ufa нравится это.
  3. Css_Ufa

    Css_Ufa

    Регистр.:
    25 ноя 2008
    Сообщения:
    543
    Симпатии:
    323
    так мне в ручную писать для каждой страницы цикл что-ли? я просто не совсем тебя понимаю)

    HTML:
    http://87.106.102.151/bet/index.php?bookmakerId=3000181&bettingExchangeId=3000206&typeofbet=qualifier&minBackOdds=
    - это запрос под
    HTML:
    Bookmaker:365Bet
    , там еще есть разные запросы, к примеру меняется
    HTML:
    Betting Exchange:
    и
    HTML:
    Select your bet type:
    и запросы разные, там еще куча страниц есть... Может дашь какую-нибудь наводку? :)
    Заранее спасибо...


    Как цикл на каждую запрос создать? Вот я это понять не могу...
     
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    последний твой пост я не очень понял

    но судя по первому посту:
    в массив $arr- список твоих запросов
    потом
    Код:
    foreach($arr as $querry)
    {
    // тут пошел твой код парсинга
    
    if(!($myFile=fopen("http://87.106.102.151/bet/index?$querry","r"))) // Адресс донора
    { 
    echo "The news interface is down for maintenance."; 
    exit; 
    } 
    while(!feof($myFile)) 
    { 
    $myLine.=fgets($myFile,255); 
    } 
    fclose($myFile); 
    $start="<div>"; // Начало тега, с которого нужно взять инфу
    $end="</div>"; // конец тега
    $start_position=strpos($myLine, $start);  //обработка сайта с место начала тега
    $end_position=strpos($myLine, $end)+strlen($end); // конец обработки
    $length=$end_position-$start_position; // задается длина
    $myLine=substr($myLine, $start_position, $length); 
    // Display HTML 
    echo $myLine; // вывод страницы
    }
    
    PS
    никак не понял как http://87.106.102.151/bet/index.php...geId=3000206&typeofbet=qualifier&minBackOdds= связано с Bookmaker:365Bet
     
  5. Css_Ufa

    Css_Ufa

    Регистр.:
    25 ноя 2008
    Сообщения:
    543
    Симпатии:
    323
    Там выбираешь Bookmaker, тебе выдает запрос, а ту ссылку которую я дал - это пример, что это запрос от Bookmaker,который равен 365Bet... Вот и все, теперь понял?
    Что там очень много запросов и я понять не могу как их делать...:ah:

    Добавлено через 1 минуту
    А вот пример, массив $arr - как сделать хоть для одного запроса, подскажи пож-та...
     
  6. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    Там страницы передаются в параметре s с шагом 30.
    1 страница - http://87.106.102.151/bet/index.php....&s=0
    2 страница - http://87.106.102.151/bet/index.php....&s=30
    3 страница - http://87.106.102.151/bet/index.php....&s=60
    делаешь простой цикл
    PHP:
    for($i 0$i 14$i+=30) {
        
    fopen('http://87.106.102.151/bet/index.php?bookmakerId=3000181&bettingExchangeId=3000206&typeofbet=qualifier&minBackOdds=&s='.$i);
    }
    как-то так.
    А насчет как все там связано, проще зайти на саму страницу http://87.106.102.151/bet/ и глянуть сурс.
     
    Css_Ufa нравится это.
  7. Css_Ufa

    Css_Ufa

    Регистр.:
    25 ноя 2008
    Сообщения:
    543
    Симпатии:
    323
    А как сурс глянуть? я не знаю...
     
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    создай ассоциированные массивы
    PHP:
    <?php
    $bookmakerId
    =array(
            
    '10Bet'=>'3000271',
            
    '188Bet'=>'3000343',
            
    '24hPoker'=>'3000250',
            
    '888Sport'=>'3000424',
            
    'Bet-at-home.com'=>'3000070',
            
    'Bet365'=>'3000181',
            
    'BetBoo'=>'3000380',
            
    'BetChronicle'=>'3000411',
            
    'BetClick'=>'3000336',
            
    'BetCris'=>'3000244',
            
    'BetDaq'=>'3000206',
            
    'Betfair'=>'3000177',
            
    'Betfred'=>'3000294',
            
    'BetGun'=>'3000342',
            
    'Betinternet'=>'3000074',
            
    'Betsafe'=>'3000314',
            
    'Betway'=>'3000326',
            
    'Blue Square'=>'3000037',
            
    'Bodog.com'=>'3000174',
            
    'Boyle Sports'=>'3000287',
            
    'BWin'=>'3000006',
            
    'Canbet'=>'3000058',
            
    'Centrebet'=>'3000007',
            
    'Coral'=>'3000245',
            
    'Eurobet'=>'3000005',
            
    'Expekt'=>'3000028',
            
    'Gamebookers'=>'3000277',
            
    'Globetsport'=>'3000431',
            
    'IASbet'=>'3000026',
            
    'Intertops'=>'3000009',
            
    'Interwetten'=>'3000004',
            
    'Jenningsbet'=>'3000481',
            
    'Jetbull'=>'3000419',
            
    'Ladbrokes'=>'3000068',
            
    'MyBet'=>'3000141',
            
    'Paddy Power'=>'3000113',
            
    'PartyBets'=>'3000382',
            
    'SportingBet'=>'3000012',
            
    'SportsAcumen'=>'3000369',
            
    'Stan James'=>'3000066',
            
    'Stryyke'=>'3000445',
            
    'Tipico'=>'3000474',
            
    'Totesport'=>'3000200',
            
    'Unibet'=>'3000015',
            
    'William Hill'=>'3000021',
            
    'WinUnited'=>'3000349',
            
    'zedbet'=>'3000443'
            
    );
    $bettingExchangeId=array(
        
    'BetDaq'=>'3000206',
        
    'Betfair'=>'3000177',
        
    'WBX'=>'3000396'
        
    );
        
    ?>
    и обращайся как
    Для 188Bet:Betfair
    Код:
    $url='http://87.106.102.151/bet/index.php?bookmakerId='.$bookmakerId['188Bet'].'&bettingExchangeId='.$bettingExchangeId['Betfair'].'&typeofbet=qualifier&minBackOdds=
    
    если я правильно понял вопрос

    ну а про листание страниц тебе уже сказали

    Добавлено через 1 минуту
    PS если ты не знаешь как просмотреть исходный код html страницы -- ( Вид - Исходный код ) то имхо рановато тебе писать парсеры
     
    Css_Ufa нравится это.
  9. Css_Ufa

    Css_Ufa

    Регистр.:
    25 ноя 2008
    Сообщения:
    543
    Симпатии:
    323
    Я просто сурс - не правильно понял. а так я давно его просмотрел уже весь...

    Так вот, спасибо всем, на Ваш суд, творение граббера...

    1. Сначала задаем откуда грабим инфу:
    HTML:
    if(!($myFile=fopen("http://87.106.102.151/bet/index.php?bookmakerId='.$bookmakerId.'&bettingExchangeId='.$bettingExchangeId.'&typeofbet=qualifier&minBackOdds=$querry","r"))) 
    2. затем создаем цикл
    HTML:
    
    foreach($arr as $querry)
    {
    $bookmakerId=array( 
            '10Bet'=>'3000271', 
            '188Bet'=>'3000343', 
            '24hPoker'=>'3000250', 
            '888Sport'=>'3000424', 
            'Bet-at-home.com'=>'3000070', 
            'Bet365'=>'3000181', 
            'BetBoo'=>'3000380', 
            'BetChronicle'=>'3000411', 
            'BetClick'=>'3000336', 
            'BetCris'=>'3000244', 
            'BetDaq'=>'3000206', 
            'Betfair'=>'3000177', 
            'Betfred'=>'3000294', 
            'BetGun'=>'3000342', 
            'Betinternet'=>'3000074', 
            'Betsafe'=>'3000314', 
            'Betway'=>'3000326', 
            'Blue Square'=>'3000037', 
            'Bodog.com'=>'3000174', 
            'Boyle Sports'=>'3000287', 
            'BWin'=>'3000006', 
            'Canbet'=>'3000058', 
            'Centrebet'=>'3000007', 
            'Coral'=>'3000245', 
            'Eurobet'=>'3000005', 
            'Expekt'=>'3000028', 
            'Gamebookers'=>'3000277', 
            'Globetsport'=>'3000431', 
            'IASbet'=>'3000026', 
            'Intertops'=>'3000009', 
            'Interwetten'=>'3000004', 
            'Jenningsbet'=>'3000481', 
            'Jetbull'=>'3000419', 
            'Ladbrokes'=>'3000068', 
            'MyBet'=>'3000141', 
            'Paddy Power'=>'3000113', 
            'PartyBets'=>'3000382', 
            'SportingBet'=>'3000012', 
            'SportsAcumen'=>'3000369', 
            'Stan James'=>'3000066', 
            'Stryyke'=>'3000445', 
            'Tipico'=>'3000474', 
            'Totesport'=>'3000200', 
            'Unibet'=>'3000015', 
            'William Hill'=>'3000021', 
            'WinUnited'=>'3000349', 
            'zedbet'=>'3000443' 
            ); 
    $bettingExchangeId=array( 
        'BetDaq'=>'3000206', 
        'Betfair'=>'3000177', 
        'WBX'=>'3000396' 
        );
    3. Создаем цикл для просматривания страниц
    HTML:
    
    for($i = 0, $i < 14; $i+=30) { 
        fopen('http://87.106.102.151/bet/index.php?bookmakerId='.$bookmakerId.'&bettingExchangeId='.$bettingExchangeId.'&typeofbet=qualifier&minBackOdds=&s='.$i); 
    } 
    
    4. Затем ставим откуда копипастим
    HTML:
    
    while(!feof($myFile)) 
    { 
    $myLine.=fgets($myFile,255); 
    } 
    fclose($myFile); 
    $start="<div>"; 
    $end="</div>"; 
    $start_position=strpos($myLine, $start); 
    $end_position=strpos($myLine, $end)+strlen($end); 
    $length=$end_position-$start_position; 
    $myLine=substr($myLine, $start_position, $length); 
    // Display HTML 
    echo $myLine;
     
    Вроде все, ничего не забыл... Но чувствую что не пашет...

    Еше вопрос, как убрать не нужные элемент? Имеется ввиду реклама, она содержится в этих ограничениях
    HTML:
    $start="<div>"; $end="</div>"; 
    В итоге получается так:

    <?php
    if(!($myFile=fopen("http://87.106.102.151/bet/index.php?bookmakerId='.$bookmakerId.'&bettingExchangeId='.$bettingExchangeId.'&typeofbet=qualifier&minBackOdds=$querry","r")))

    foreach($arr as $querry)
    {
    $bookmakerId=array(
    '10Bet'=>'3000271',
    '188Bet'=>'3000343',
    '24hPoker'=>'3000250',
    '888Sport'=>'3000424',
    'Bet-at-home.com'=>'3000070',
    'Bet365'=>'3000181',
    'BetBoo'=>'3000380',
    'BetChronicle'=>'3000411',
    'BetClick'=>'3000336',
    'BetCris'=>'3000244',
    'BetDaq'=>'3000206',
    'Betfair'=>'3000177',
    'Betfred'=>'3000294',
    'BetGun'=>'3000342',
    'Betinternet'=>'3000074',
    'Betsafe'=>'3000314',
    'Betway'=>'3000326',
    'Blue Square'=>'3000037',
    'Bodog.com'=>'3000174',
    'Boyle Sports'=>'3000287',
    'BWin'=>'3000006',
    'Canbet'=>'3000058',
    'Centrebet'=>'3000007',
    'Coral'=>'3000245',
    'Eurobet'=>'3000005',
    'Expekt'=>'3000028',
    'Gamebookers'=>'3000277',
    'Globetsport'=>'3000431',
    'IASbet'=>'3000026',
    'Intertops'=>'3000009',
    'Interwetten'=>'3000004',
    'Jenningsbet'=>'3000481',
    'Jetbull'=>'3000419',
    'Ladbrokes'=>'3000068',
    'MyBet'=>'3000141',
    'Paddy Power'=>'3000113',
    'PartyBets'=>'3000382',
    'SportingBet'=>'3000012',
    'SportsAcumen'=>'3000369',
    'Stan James'=>'3000066',
    'Stryyke'=>'3000445',
    'Tipico'=>'3000474',
    'Totesport'=>'3000200',
    'Unibet'=>'3000015',
    'William Hill'=>'3000021',
    'WinUnited'=>'3000349',
    'zedbet'=>'3000443'
    );
    $bettingExchangeId=array(
    'BetDaq'=>'3000206',
    'Betfair'=>'3000177',
    'WBX'=>'3000396'
    );
    }

    for($i = 0, $i < 14; $i+=30) {
    fopen('http://87.106.102.151/bet/index.php?bookmakerId='.$bookmakerId.'&bettingExchangeId='.$bettingExchangeId.'&typeofbet=qualifier&minBackOdds=&s='.$i);
    }

    while(!feof($myFile))
    {
    $myLine.=fgets($myFile,255);
    }
    fclose($myFile);
    $start="<div>";
    $end="</div>";
    $start_position=strpos($myLine, $start);
    $end_position=strpos($myLine, $end)+strlen($end);
    $length=$end_position-$start_position;
    $myLine=substr($myLine, $start_position, $length);
    // Display HTML
    echo $myLine;
    ?>
    <html>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="layout/styles/styles.css" />
    </html>


    теперь он только рекламу показывает... :)
    Самое странное скорее всего неправильно в цикле по страницам и + в самом цикле запроса по id букмекера:)
     
  10. Evgen_XXX

    Evgen_XXX Создатель

    Регистр.:
    8 май 2008
    Сообщения:
    12
    Симпатии:
    1
    Вы явно сами не понимаете что делаете...
    Зачем вы в цикле инициализируете массив?

    В общем виде у вас должно получиться:
    1) Цикл по страницам выдачи сайта-донора
    2) Загрузка страницы
    3) Обработка
    4) Вывод результатов/сохранение полученных данных
     
Статус темы:
Закрыта.