За последние 24 часа нас посетили 22572 программиста и 1589 роботов. Сейчас ищут 853 программиста ...

Взять контент из тега <a>

Тема в разделе "PHP для новичков", создана пользователем Dima4321, 18 янв 2011.

  1. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот это работает. Беру все ссылки со страницы и разношу их по одной на свои вновь созданные страницы.

    PHP:
    1. <?php
    2.  
    3.    ini_set('display_errors',1);
    4.    error_reporting(E_ALL);
    5.    
    6.    $n=file_get_contents('http://хороший сайт/Rick%20Wakeman.html');
    7.    
    8.    preg_match_all('/<a href="[^#]+?<\/a>/si',$n,$matches);
    9.    $i=1;
    10.    foreach($matches[0] as $value)
    11.    {
    12.    file_put_contents("$i.html",$value);
    13.    $i++;
    14.    echo $value;
    15.    echo '<br>';
    16.    }
    17.  
    18.  ?>
    А вот здесь хочу взять контент каждой ссылки (тега <a>) и разложить по своим страницам.
    Допускаю ошибку. Не правильно беру контент тега а. Научите.

    PHP:
    1. <?php
    2.  
    3.    ini_set('display_errors',1);
    4.    error_reporting(E_ALL);
    5.    
    6.    $n=file_get_contents('http://хороший сайт.com/Rick%20Wakeman.html');
    7.    
    8.    preg_match_all('/<a href="[^#]+?<\/a>/si',$n,$matches);
    9.    $i=1;
    10.    foreach($matches[0] as $value)
    11.    {
    12.    $get=file_get_contents($value);
    13.    file_put_contents("$i.html",$get);
    14.    $i++;
    15.    echo $value;
    16.    }
    17.  
    18.  ?>
     
  2. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Вот. Но все равно наверно безграмотно выдает ошибки хотя и создает корректные страницы.

    PHP:
    1. <?php
    2.  
    3.    ini_set('display_errors',1);
    4.    error_reporting(E_ALL);
    5.    
    6.    $n=file_get_contents('http://лучший сайт/Rick%20Wakeman.html');
    7.    
    8.    preg_match_all('/<a href=\"([^#]+?)\".+?<\/a>/si',$n,$matches);
    9.    $i=1;
    10.    foreach($matches[1] as $value)
    11.    {
    12.    $get=file_get_contents("http://лучший сайт/$value");
    13.    file_put_contents("$i.html",$get);
    14.    $i++;
    15.    echo $value;
    16.    }
    17.  
    18.  ?>
     
  3. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Удалось немного подперчил код. а именно:

    корректировка регулярки, чтобы не хватал почтовый ящик, после чего возникает сообщение об ошибке и
    применил полезную функцию rawurlencode. Так как сами ссылки имели пробелы между словами и надо было их заполнить (%) с последующими двумя 16-ричными цифрами. Функция справилась на ура. И контент взят.
    Кстати а как в итерациях вместо $i++ (т.е не привязывать вновь полученный контент к цифрам в назаваниях файлов а копировать файлы по названиям ссылок.
    Наверно регуляркой или функцией разбора урлов + обратное rawurldecode. Я правильно понимаю ???

    Чиркните пару строк. Мжет код можно легко улучшить например выставить время обработки и прочее..мм ??



    PHP:
    1. <?php
    2.  
    3.    ini_set('display_errors',1);
    4.    error_reporting(E_ALL);
    5.    
    6.    $n=file_get_contents('http://хороший сайт/Rick%20Wakeman.html');
    7.    
    8.    preg_match_all('/<a href=\"(?!mailto:)([^#]+?)\".+?<\/a>/si',$n,$matches);
    9.    print_r($matches[1]);
    10.    $i=1;
    11.    foreach($matches[1] as $value)
    12.    {
    13.    $new=rawurlencode($value);
    14.    $get=file_get_contents("http://хороший сайт/$new");
    15.    file_put_contents("$i.html",$get);
    16.    $i++;
    17.    echo $value;
    18.    echo '<br>';
    19.    }
    20.  
    21.  ?>