PDA

Просмотр полной версии : Parser определенных ссылок ?


Adio
30.06.2009, 11:38
Привет всем вот накопал парсер

<?php

$code = file_get_contents('http://site.com');
preg_match_all('#href=[\'"]([^\'"]+)[\'"]#i', $code, $matches);
echo '<pre>'.print_r($matches[1], true);
?>


Он выдерает ссылки.

Как мне сделать так что бы он выдерал определенные ссылки ? а не все подряд к пример ссылку типа

<a href=example.com>HELLO WORLD</a>


а все остальные ссылки не трогал ? реально ли такое ?

wildshaman
30.06.2009, 11:52
Определенные - это какие?

XopoIII
30.06.2009, 11:54
ставь условие и проверяй то что тебе нужно

Adio
30.06.2009, 12:08
Так я не шарю в этом вообще я на уровне пользователя PHP понимаю..

Определенные это мне нужно пропарисить сайт или документ и вывести все
ссылки

<a href=example.com>HELLO WORLD</a>

А лучше так ( Находим только ссылку Example.com удаляем ее и оставляем только HELLO WORLD..

Можно так ? что бы находило определенную ссылку и выводило только слово HELLO WORLD без ссылки ?

wildshaman
30.06.2009, 12:11
<?php
$site=file_get_contents('http://yandex.ru');
preg_match_all('|<a href="(.*?)">(.*?)</a>|is', $site, $out);
print_r($out[2]);
?>

tc

BrainDeaD
30.06.2009, 12:14
preg_match_all('#href=example.com>(HELLO WORLD)#', $code, $matches);
echo $matches[1];

!TNK!
30.06.2009, 12:18
можно в обычном блокноте сделать замену в исходнике
<a href=example.com> на пусто или чтото другое
после парсинга конешн

BrainDeaD
30.06.2009, 12:20
зачем? если так как я написал, он выдирает только текст.

Adio
30.06.2009, 12:33
А оно будет выдавать по разному ?? ибо там где HELLO WORLD идет вида

HELLO WORLD1
HELLO WORLD2
WORLD HELLO4

Wildshaman

<?php
$site=file_get_contents('http://yandex.ru');
preg_match_all('|<a href="(.*?)">(.*?)</a>|is', $site, $out);
print_r($out[2]);
?>

Вырезает то что нужно...

Мне нужно вот как отсеить

<a href=example.com>Любой текст</a>

Пропарсить только example.com ссылки и вывести только (Любой текст)

BrainDeaD
30.06.2009, 12:40
preg_match_all('#href=example.com>([a-zA-Z0-9_-]*)</a>#', $code, $matches);

Adio
30.06.2009, 12:48
Напишите полный код ! у меня не работает .т.е не чег оне выводит !!!

<?php
$code=file_get_contents('site.com');
preg_match_all('#href=example.com>([a-zA-Z0-9_-]*)#', $code, $matches);
echo $matches[1];
?>

Не роботает.

BrainDeaD
30.06.2009, 12:49
да, я кое что забыл. испарвил предыдущий пост. попробуй ещё раз с исправленым

или попробуй так. остальной код у тебя ок.
preg_match_all('#href=example.com>(.*)#', $code, $matches);

Adio
30.06.2009, 12:54
<?php
$code=file_get_contents('site.com');
preg_match_all('#href=example.com>(.*)#', $code, $matches);
echo $matches[1];
?>


Выводит только Array

BrainDeaD
30.06.2009, 12:59
бля опять забыл закрыть тег (((
preg_match_all('#href=example.com>(.*)</a>#', $code, $matches);

а как с другим исправленным вариантом?
preg_match_all('#href=example.com>([a-zA-Z0-9_-]*)</a>#', $code, $matches);

wildshaman
30.06.2009, 13:04
<?php
$code=file_get_contents('site.com');
preg_match_all('#href=example.com>(.*)#', $code, $matches);
echo $matches[1];
?>


Выводит только Array

print_r($matches[1]);

И воообще, напиши из чего что должно получаться.

Adio
30.06.2009, 13:10
<?php
$code=file_get_contents('http://site.com');
preg_match_all('#href=site.write.com>([a-zA-Z0-9_-]*)</a>#', $code, $matches);
print_r($matches[1]);
?>

Не Работает не знаш шо вы там мутите мне массив пустой вылетает !

Может потому что сайт www.site.in.com две точки ? .in.com ?

Есть определенные ссылки в странице <a href=www.site.in.com>QWERT</a>

Мне нужно пропарисить только ссылки с именем www.site.in.com bи вывести только QWERTY (вместо QWERT может быть любой текст)

BrainDeaD
30.06.2009, 13:14
да всё понятно. мы ничего не мутим. или на сайте нет ссылок или они ни в тегах или ты неправильно адрес задаёш. дай реальный адрес сайта, я проверю. можно в личку

Adio
30.06.2009, 13:18
Я проверял на 3 сайтах де есть ссылки не работает проверь ты если у тя денвер стоит

Adio
30.06.2009, 13:47
Ну вот. ) в тупике все )))

ghostwizard
30.06.2009, 13:47
1. [a-zA-Z0-9_-]* с кириллицей не прокатит.
2. Не забываем про кавычки при парсинге.
3. Линки есть и c http://

Вот так должно работать с выборкой по сайту


preg_match_all('#href=[\'"](.*)mysite.com(.*)[\'"]#i', $code, $matches); # любой линк вида mysite.com/blabla/i.html, http://mysite.com, mysite.com

preg_match_all('#href=[\'"](.*)mysite.com[\'"]#i', $code, $matches); # любой линк http://mysite.com или mysite.com

L I G A
30.06.2009, 13:47
<?php
$code=file_get_contents('http://www.in.com/?utm_source=redirect&utm_medium=in.com');
preg_match_all('/<a href.*>(.*)<\/a>/', $code, $matches);
echo "<pre>";
print_r ($matches);
echo "<pre>";
?>

Adio
30.06.2009, 14:01
preg_match_all('#href=[\'"](.*)mysite.com(.*)[\'"]#i', $code, $matches);

Этот работает только он почемуто выдирает с картинаками

http://site.in.com/blablabla/"><img src="http://site.in.com/blablabla" alt="Nameofimages">

Как убрать картинки ? А так все классно то что надо !! ghostwizard

Мне можеш дать ссылку где об этом почитать что бы усовершенсвовать можно было ?
т.е я почитаю и буду сам потом эксперементировать ты мне помог с самым начало ибо я в php только на уровне кода там модифицировать что то заменить и так по мелочи а вот это для меня всегда был полный лес эти выражение чи шо там оно.. )

Adio
30.06.2009, 14:51
А если так ?

<a class="smallblu" href="http://site.in/blablalbla">qwerttt</a>

Если все выдереть после класса ??? то можно так может так будет проще мне чем искать все ссылки на странице ?

L I G A
30.06.2009, 16:02
там разный классы для ссылок,так будет тянуть линки с одним классом.

L I G A
30.06.2009, 16:16
<?php
$code=file_get_contents('http://forum.antichat.ru');
preg_match_all('/<a href=\".*">[^<img src.*](.*)<\/a>/', $code, $matches);
echo "<pre>";
print_r ($matches[0]);
echo "<pre>";
?>

ТС с вас бутылка.

BrainDeaD
30.06.2009, 16:49
Мне можеш дать ссылку где об этом почитать что бы усовершенсвовать можно было ?
т.е я почитаю и буду сам потом эксперементировать ты мне помог с самым начало ибо я в php только на уровне кода там модифицировать что то заменить и так по мелочи а вот это для меня всегда был полный лес эти выражение чи шо там оно.. )
http://www.phpfaq.ru/regexp
http://www.pcre.ru/

Adio
30.06.2009, 17:20
Слава богу там адин класс визде стоит .. те где нужно парсить там он и стоит )))

<a class="smallblu" href="http://site.in/blablalbla">qwerttt</a>

Класс стоит на всех мне нужных ссылках ))

Бутыка нет. если все получиться с мегя любая графическая работа. 2D 3D WEB DESIGN

Adio
30.06.2009, 17:48
Нет там что то не то с классами много мусора выводит... там класс стоит только где мне нужно а оно выводит то что нужно и плюсь еще пол контента.

Вот самый оптимальный вариант из ответов сдесь

<?php
$code=file_get_contents('http://site.com');
preg_match_all('#href=[\'"](.*)site.com.in(.*)[\'"]#i', $code, $matches);
print_r($matches[1]);
?>

Выводит

[6] => http://site.com.in/blablabla/?top=1"><img src="http://site.com.in" alt="BLABLABLA"></a>

Так вот . Это бла бля бла есть в АЛЬТЕ ! т.е текс цены который мне нужен етьс в АЛЬТЕ картинки..

Так вот (Если чесно у мя башка уже разрываеться..)))

Мне надо это BLABLABLA вытащить чистым в столбик ...

Уже не знаю как обьяснить но самый оптимальный вариаент это

wildshaman
30.06.2009, 18:01
Скажи сайт, с которого парсить надо.

Adio
30.06.2009, 18:11
http://digiland.libero.it/ricerca_persone.php

Там смотри есть 8 картинок с именами вот те имена мне и нужны без картинок в столбик.

Adio
30.06.2009, 18:13
Уже задолбался ото не знаю языка а потом как приспичит шо то сделать сидиш голова разрываеться ))) от непонимание этих регуляров.. я с ними 1 раз просто сталкиваюсь..

Kaimi
30.06.2009, 18:19
Так что ли?

$content = file_get_contents('http://digiland.libero.it/ricerca_persone.php');

preg_match_all('/114" alt="(.+?)"><\/a>/', $content, $match);

foreach ($match[1] as $name)
{
print $name."<br>";
}

Adio
30.06.2009, 18:23
ДАААААААААААААААААААААА !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!

preg_match_all('/114" alt="(.+?)"><\/a>/', $content, $match);

А можеш чуть чуть разьяснить что ты сделал ?


Ище и написал так чтоли ? )) типа раз два и сделал ))) ну это для тебя кто знает ))) тому просто )))

FireFenix
30.06.2009, 18:28
/114" alt="(.+?)"><\/a>/ - ищет все вхождение текста 114" alt="текст"></a>, где в параметре alt 1 или более симолов

Adio
30.06.2009, 18:45
О хитрюга необыкновенус 114 это высота т.е я так понял альт будет не какой папало а в каком есть значение height-114 =)))

Будем разбераца.

Я просто хочу парсер ников в коммунити сделать.

В бущем будет 2 проблема...

Ведь парсер когда парсит он только заданный URL ? а как задать ему что бы он пропарисил скажем 100 урл ? Если это реально

FireFenix
30.06.2009, 19:50
В бущем будет 2 проблема...
Ведь парсер когда парсит он только заданный URL ? а как задать ему что бы он пропарисил скажем 100 урл ? Если это реально
Что сложного? складываешь урлы в файл, или в коде в массив .... Потом достаёшь в массив (если в файле) и в цикле перебираешь. Типа

<?php
$urls = file('url_list.txt');

foreach ($urls as $key => $url)
{
$content = file_get_conten($url);
//тут релугярка + обработка найденного
}
?>