парсер url-ов

Discussion in 'PHP' started by dm1z, 26 Oct 2008.

  1. dm1z

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

    Joined:
    2 Feb 2008
    Messages:
    29
    Likes Received:
    4
    Reputations:
    0
    задача такая

    нужно выдернуть все урлы со страницы
    к примеру
    http://www.google.ru/search?complete...&start=90&sa=N

    и сложить их в файл!

    а если б ещё и менять значение скажем +10

    http://www.google.ru/search?complete...22&start=здесь +10 вместо 90 100&sa=N

    при каждом следущем сборе дак вообще замечатильно!

    может кто подскажет как реализовать?
    хотя б первую часть!
    заранее спс!!!
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Code:
    <?php
    // Парсер url после выдачи гугла по запросу
    function parse_serp($engine, $query)
    {
    switch (strtolower($engine))
    {
    case 'google':
    $request = 'http://www.google.com/ie?hl=ru&num=100&start=0&lr=&q='.urlencode(trim($query));
    $pattern = '/<a title="(.*)" href=(.*)>(.*)<\/a>/isU';
    $result = file_get_contents($request);
    if(preg_match_all($pattern, $result, $matches))
    {
    for ($i=0; $i<count($matches[0]); $i++)
    {
    $link = $matches[2][$i];
    $serp[] = $link;
    }
    }
    break;
    }
    return $serp;
    }
    $result = parse_serp("google", "antichat");
    $log = implode("\r\n",$result);
    $handler=fopen('log.txt','w');
    if($handler) {fwrite($handler,$log);}
    fclose($handler);
    echo "Все данные были сохранены в log.txt"; 
    ?>
    
     
    #2 Pashkela, 26 Oct 2008
    Last edited: 26 Oct 2008
    1 person likes this.
  3. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    ну и окончательная версия по твоему вопросу (универсальная):

    Code:
       
    <?php
    // Парсер url после выдачи гугла по запросу
    $handler=fopen('log.txt','w'); // если не хотим терять старые данные - то "a+"
    $limit = 0;
    $zapros = "antichat"; // Наш запрос для поиска
    $page_start = 0; // Стартовая страница из расчета 100 результатов выдачи на страницу
    $page_end = 200; // Последняя страница из расчета 100 результатов выдачи на страницу
    function parse_serp($engine, $query, $limit)
    {
    if ($limit<100) {$request = 'http://www.google.com/ie?hl=ru&num=100&start=' . $limit. '&lr=&q='.urlencode(trim($query));}
    if ($limit>=100) {$request = 'http://www.google.com/ie?q=' . urlencode(trim($query)) . '&num=100&hl=ru&lr=&start=' . $limit . '&sa=N';}
    $pattern = '/<a title="(.*)" href=(.*)>(.*)<\/a>/isU';
    $result = file_get_contents($request);
    if(preg_match_all($pattern, $result, $matches))
    {
    for ($i=0; $i<count($matches[0]); $i++)
    {
    $link = $matches[2][$i];
    $serp[] = $link;
    }
    }
    return $serp;
    }
    for ($i=$page_start;$i<=$page_end;$i++)
    {
    $result = parse_serp("google", $zapros, $i); 
    $log = implode("\r\n",$result);
    if($handler) {fwrite($handler,$log);}
    $i=$i+100;
    if ($i>100) {$i=$i-1;}
    }
    fclose($handler);
    echo "Все данные были сохранены в log.txt"; 
    ?>
    
     
    #3 Pashkela, 26 Oct 2008
    Last edited: 26 Oct 2008