Помощь в составлении регулярного выражения для граббера!

Статус
В этой теме нельзя размещать новые ответы.

Acidrayne

Местный житель
Регистрация
30 Сен 2007
Сообщения
296
Реакции
20
Здраствуйте задался целью написать граббер одного популярного сайта, но в итоге понял что ничего не смыслю в регулярных выражениях..... И для меня одного эта задача пока не осущствима!
Тоесть это смарт версия основного сайта, я выбрал ее потому что грабить с нее проще , потому что отсутствуют элементы дизайна!
Написал авторизацию на curl но потом встал в тупик, помогите мне пожалуйста распарсить ключевые моменты этой страницы !!! Такие как название, описание, категория, ну и ссылка на сам файл и скриншот, чтобы их можно было скачать!
Мне вот помогли с регуляркой, но она по неизвестным мне причинам не хочет работать:
Код:
#название и ссылка  
preg_match("|<div id='plus-\d*'></div><hr><br><b><a\s*href='([^']*)'>(.*?)</a></b>|is", $html, $url);  
#категория  
preg_match("|<br>Категория:[\s]*<a href='[^']*'>(.*?)</a>|is", $html, $cat);  
#скриншот  
preg_match("|[<a href='([^']*)'>скриншот</a>\]|is", $html, $scr);  
#описание  
preg_match("|2010,(.*?)\[|is", $html, $discr);  
echo "$url $cat"; 
echo "$discr"; 
echo "$scr";
выдается ошибка:
Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 16 in E:\webserver\www\curl\curl.php on line 25
Warning: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 11 in E:\webserver\www\curl\curl.php on line 27
Array Array
Исходны йкод страницы находится ниже, Зараннеее благодарен с уважением...
 
Код:
|[<a href='([^']*) => |[<a href='([^']*)[B]|[/B]
"|2010,(.*?)\[|is" => '|2010,(.*?)\[|is'
 
Код:
|[<a href='([^']*) => |[<a href='([^']*)[B]|[/B]
"|2010,(.*?)\[|is" => '|2010,(.*?)\[|is'

Сорри не могли бы вы более подробно описать суть ?

пишет ошибку:
Parse error: syntax error, unexpected '.' in E:\AppServ\www\curl\curl.php on line 16

делал так:

Код:
preg_match("|[<a href='([^']*) => |[<a href='([^']*)|"|2010,(.*?)\[|is" => '|2010,(.*?)\[|is'", $html, $cat);
 
блин я уже совсем замучался с ними, вы не поверите но выдает опять такую же ошибку:

Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 16 in E:\webserver\www\curl\curl.php on line 34
Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 16 in E:\webserver\www\curl\curl.php on line 36
Array Array

в этом коде:

Код:
preg_match("|[<a href='([^']*)|is", $html, $scr); 
echo "$scr"; 
preg_match('|2010,(.*?)\[|is', $html, $discr);
echo "$discr";

В $html данные попадают корректно, проверялось echo $html; перед выводом регулярок!
 
Запутался
Код:
"|[<a href='([^']*)'>скриншот</a>\]|is" 
заменить на
"|\[<a href='([^']*)'>скриншот</a>\]|is"
PHP:
preg_match("|[<a href='([^']*)|is", $html, $scr); 
echo "$scr"; 
preg_match('|2010,(.*?)\[|is', $html, $discr);
echo "$discr";
Код:
arning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 16 in E:\webserver\www\curl\curl.php on line 34
Warning: preg_match() [function.preg-match]: Compilation failed: unmatched parentheses at offset 16 in E:\webserver\www\curl\curl.php on line 36
Array Array
У меня одна ошибка, и само собой на первой строке, а не 34 и 36

Сорри не могли бы вы более подробно описать суть ?
Суть в том что автор не экранировал символ [.
 
делаю так:
PHP:
preg_match("|\[<a href='([^']*)'>скриншот</a>\]|is", $html, $scr); 
print_r ($scr);

результат array() и все больше ничего нет :(

когда делаю echo $scr[0]; - то вообще пустой экран
 
я хз, что там ссылка на сам файл, если то, во что заключено само название, то как-то так:
PHP:
$pattern = "/<br><b><a  href='(.+)'>(.+)<.*<a href='(.+)'>скриншот.*категория: <a href='(.+)'>(.+)<.*<br><div.*>(.+)</Umis";
if (!preg_match_all($pattern, $content, $parts)) {
	die("Couldn't parse content\n");
}

array_shift($parts);
здесь, $parts[0] - массив относительных ссылок на файл, $parts[1] - названия, $parts[2] - ссылки на скрин, $parts[3] - относительные ссылки на категории (тебе потом нужно строить дерево по ним), $parts[4] - название категорий, $parts[5] - описание.

паттерн длинный, но лучше по производительности использовать именно такой вариант.

зы: регулярка именно для твоего случая, сырец которого был в аттаче, если, скажем УРЛы в анкорах не в одинарных кавычках. то ессно нужно перерписывать
 
Я уже не знаю чт ои делать, наверное это заколдованное занятие :)

Перепробывал все значения $parts от 1-4 всегда на экране выводится только
может что-то не правльно делаю ??
 
ээ, вместо echo $parts[5]; print_r($parts[5]) ;)
только зачем тебе их принтить? какова конечная цель всего этого - составить базу?

в общем, в массиве $parts (при успешном парсинге, если не изменился шаблон) бедет 6 массивов:
$parts[0] - массив относительных ссылок на файл, $parts[1] - названия, $parts[2] - ссылки на скрин, $parts[3] - относительные ссылки на категории (тебе потом нужно строить дерево по ним), $parts[4] - название категорий, $parts[5] - описание.

зы: парсинг чужого контента - зло )
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху