[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Парсер опред. ссылок из HTML-документа
us3r
Привет всем. Задумал написать парсер ссылок, но с рег. выражениями у меня плохо ;(
Теории говорить не буду, лучше расскажу принцип:
Есть ссылка вида http://sharebee.com/6153532c на которой находится пять ссылок на файлообменники, они то мне и нужны! Вот предпологаемый код:

PHP
$open = @file_get_contents("http://sharebee.com/6153532c""r");
    
    
$link = ('#(.*?)</a>(.*?)</div>#is'); // вот тут-то и проблема, не могу составить правильное выражение
    
preg_match_all($link,$open,$out);
    
// тут можно использовать цикл for
    

@header("HTTP/1.0 200 OK");
@
header("HTTP/1.1 200 OK");
@
header("Cache-Control: no-cache, must-revalidate, max-age=0");
@
header("Expires: 0");
@
header("Pragma: no-cache");
@
header("Content-type: text/css; charset=windows-1251");
echo 
$linkz."<br />";


Нужно чтоб выводилось: (желательно в таком порядке)
http://depositfiles.com/files/cdzs8abh1
http://rapidshare.com/files/257488347/Midn..._1997_.txt.html
http://www.zshare.net/download/6286842157d5e67c/
http://www.badongo.com/file/16073697
http://www.megaupload.com/?d=U7JKFSGK

PS. За код выше сильно не бейте и помидорами не кидайтесь, я НЕ php-программер unsure.gif

2PS. Ваша инструкцию по рег. выражениям очень порарадовала - все просто и понятно и с чувством юмора: "пива нет", "спирт хорошо" rolleyes.gif !

Заранее благодарен за помощь!



Спустя 11 минут, 4 секунды (22.07.2009 - 21:35) kirik написал(а):
Регулярка будет такой:
Код
#<div class="th18"><a href="([^"]+)"[^>]+>#is

в массиве $out[1] будут лежать ссылки.

Спустя 5 минут, 4 секунды (22.07.2009 - 21:40) us3r написал(а):
Супер! Работает! Благодарю за оперативную помощь cool.gif !

Спустя 7 дней, 2 часа, 28 минут, 20 секунд (30.07.2009 - 00:08) linf написал(а):
Хотелось бы переделать даный код под себя, но не могу понять, что же выдает preg_match_all многомерный массив?

PHP
<?php
//парсим ссылки.

$link = file("http://www.bloog.ru/");
$line = implode(" ", $link);
    
$reg 
= ('#<a href="([^"]+)"[^>]+>#is'); 
preg_match_all
($reg,$line,$out);


//почему так не получается вывести хотя бы что бы что то увидеть:
echo $out[1][1]."<br />";

//или как то так:
$new_line = implode(" ", $out[1]);
echo $new_line."<br />";


Вообще в идеале бы хотелось массив, который можно будет представить в виде табличке:
PHP
echo $out[0][0]." | ".$out[0][1]."<BR>" ;
echo $out[1][0]." | ".$out[1][1]."<BR>" ;


Где в одном столбце - ссылки, в другом их названия.

Спустя 10 минут, 25 секунд (30.07.2009 - 00:19) linf написал(а):
Доолнение:
Вообще имеется ввиду получение любых ссылок как внешних так и внутренних, на произвольных сайтах.

Спустя 1 час, 43 минуты, 26 секунд (30.07.2009 - 02:02) kirik написал(а):
linf
ты перед тем как парсить в код сайта смотрел? Этот сайт требует поддержки куков, тобишь нужно сохранять куки через курл, и потом отдавать их.

Спустя 1 час, 31 минута, 49 секунд (30.07.2009 - 03:34) linf написал(а):
kirik Честно говоря мало понимаю о чем ты, я же тока начинющий...

Я делаю из определенных страниц сайта индекс файлы, что бы потом по ним искать. ссылки мне нужны, что бы потом их подставлять через массив и индексировать другие страницы..

Спустя 1 час, 10 минут, 49 секунд (30.07.2009 - 04:45) kirik написал(а):
Цитата (linf @ 29.07.2009 - 19:34)
Честно говоря мало понимаю о чем ты, я же тока начинющий...

echo $line; выведи, и посмотри что ты парсить пытаешься..

Спустя 3 часа, 50 минут, 52 секунды (30.07.2009 - 08:36) linf написал(а):
Цитата (kirik @ 30.07.2009 - 05:45)
Цитата (linf @ 29.07.2009 - 19:34)
Честно говоря мало понимаю о чем ты, я же тока начинющий...

echo $line; выведи, и посмотри что ты парсить пытаешься..

Стандартная страница с HTML или PHP.
Сайт в примере, любой...

Спустя 54 минуты, 19 секунд (30.07.2009 - 09:30) kirik написал(а):
Цитата (linf @ 30.07.2009 - 00:36)
Сайт в примере, любой...

Тот сайт который ты привел в примере парсить нужно через curl.
Попробуй _http://bash.org.ru/ вместо _http://www.bloog.ru/ прописать, увидишь что ссылки нормально парсятся.

Спустя 9 часов, 18 минут, 4 секунды (30.07.2009 - 18:48) linf написал(а):
Цитата (kirik @ 30.07.2009 - 10:30)
Цитата (linf @ 30.07.2009 - 00:36)
Сайт в примере, любой...

Тот сайт который ты привел в примере парсить нужно через curl.
Попробуй _http://bash.org.ru/ вместо _http://www.bloog.ru/ прописать, увидишь что ссылки нормально парсятся.


ДА, вы правы, а как сделать что бы массив был ассоциативный, тоесть ссылка и её название, к примеру:

Если изначально ссылки выглядели так:
HTML
<A herf="www.mts.ru">МТС</A>
<A herf="www.belline.ru">Билайн</A>


PHP
echo $out[0][0]." | ".$out[0][1]."<BR>" ;   //www.mts.ru | МТС
echo $out[1][0]." | ".$out[1][1]."<BR>" ;   //www.belline.ru | Билайн


Так же интересует каким уиклом после этого их пересчитать.

Спустя 35 минут, 38 секунд (30.07.2009 - 19:24) kirik написал(а):
Во тут глянь и вообще почитай этот ресурс (в правой колонке). Хоть там и устаревшая информация, я когда начинал нашел там много интересного для себя.

Спустя 13 часов, 14 минут, 11 секунд (31.07.2009 - 08:38) linf написал(а):
kirik, Супер, но это все действия в один шаг.

Вообще задача такова, Есть ресурс, с него вытащить все ВНУТРЕННИЕ ссылки, переходя по ним же вытаскивать снова и снова, пока они не закончатся, сравнить все и удалить повторяющиеся. Вывести все это в два столбца, ссылка и её название.

Мне кажется для этого должны быть уже какие нибуть готовые скрипты, итп. Если кто встречал подобное подскажите. Или хотя бы скажите в каком направлении искать.

Спустя 4 часа, 56 минут, 20 секунд (31.07.2009 - 13:34) linf написал(а):
PHP
echo "<pre>";
   
// качаем страницу в переменную $buf
   
$buf=implode("",file("http://www.drug.ru")); 

   
// получем ссылки в массив
   
preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/",$buf,$url); 

   
// выводим массив на экран
   
while($i<count($url[1])) { echo $url[1][$i++]."\n"; }
   echo 
"</pre>";


Работает идеально (пример с сайта, который вы рекомендовали), выводя сами линки!
Пытаюсь добавить в регулярное выражение (.*) и вывести результат в $url[2] но нечего не выходит. =-(((
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.