Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Слизнуть только текст
 
 автор: mr Bin   (22.05.2007 в 15:20)   письмо автору
 
 

Привет! Граблю страничку, по максимальному всё обрезал, оставил только текст. Но на самом деле то это текст во всевозможных тегах. Каким образом при граблении внутри скрипта сразу превратить отграбленный текст в чистый текст :) Сохранить переходы, так как там данные в таблице.
Заранее спасибо, надеюсь объяснил правильно и понятно.

   
 
 автор: mefestofel   (22.05.2007 в 16:55)   письмо автору
 
   для: mr Bin   (22.05.2007 в 15:20)
 

Отфильтруйте ненужные теги с помощью регулярных выражений, а можно на текст отграбленный посмотреть?

   
 
 автор: mr Bin   (22.05.2007 в 18:16)   письмо автору
 
   для: mefestofel   (22.05.2007 в 16:55)
 

mefestotel, конечно можно.


<table cellspacing=0 cellpadding=0>
<tr><td valign=top>1</td><td><b><a href="/inform.html?id=36"><img src="1.gif" width=16 height=16 border=0 align=absmiddle>Текст 1</a></b></td></tr>
                    
<tr><td valign=top>2</td><td><a href="/inform.html?id=37">Текст 2</a></td></tr>

<tr><td valign=top>3</td><td><a href="/inform.html?id=38">Текст 3</a></td></tr>
                    
<tr><td valign=top>4</td><td><b><a href="/inform.html?id=39"><img src="1.gif" width=16 height=16 border=0 align=absmiddle>Текст 4</a></b></td></tr>

</table>


Проблема ещё в том, что где-то есть картинка, а где-то её нет. Подгадать, бкдет ли картинка или нет невозможно. Количество пунктов в таблице тоже каждый раз разное.. Вот..

   
 
 автор: mefestofel   (22.05.2007 в 20:06)   письмо автору
 
   для: mr Bin   (22.05.2007 в 18:16)
 

И какие теги надо удалить, что-то я не понял, чего надо добиться, вырвать текст и отправить в БД?
или разметку таблицы оставить, а убрать <a href=""></a> <b></b>?

P.S. Дайте адрес страницы которую грабите......

   
 
 автор: mr Bin   (22.05.2007 в 22:42)   письмо автору
 
   для: mefestofel   (22.05.2007 в 20:06)
 

Вы правильно поняли, нужно просто выбрать текст и записать в бд.
Создавая тему, удмал есть какая-либо функция отделить текст от всего остального, а данный вопрос уже идёт в регулярку..
Поэтому нужен пример регулярки, с которой я всё мучаюсь и не могу разобраться...

p.s. Данная таблица - это уже отграбленный код - поэтому страница не поможет, но если поможет, то вот страница которую граблю - тв программа на маил ру :)

Вот здесь снизу мне уже помогли, чтобы отфарматировать текстовый список:
http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=37578&page=1
поэтому проблема только в том, чтобы отделить текст от тэгов.

   
 
 автор: mefestofel   (22.05.2007 в 23:30)   письмо автору
 
   для: mr Bin   (22.05.2007 в 22:42)
 

Повторю еще раз, дайте мне ссылку на страницу которую Вы грабите, именно ссылку...

   
 
 автор: mr Bin   (22.05.2007 в 23:37)   письмо автору
 
   для: mefestofel   (22.05.2007 в 23:30)
 

http://tv.mail.ru/?date=2007-05-23&gosetup=1&period=3&channel=1

   
 
 автор: mefestofel   (23.05.2007 в 00:01)   письмо автору
 
   для: mr Bin   (22.05.2007 в 23:37)
 

Вот Ваш код:

<?
function GetInfo($url)
{
$content file_get_contents($url);
set_time_limit(600);
$pattern "|<td valign=top class=time>([^<]+)</td>[\s]*<td>[\s]*<a href=\"([^\"]+)\">([^<]+)</a>[\s]*</td>[\s]*|is";
preg_match_all($pattern$content$out);
//print_r($out);
  
for ($i 0$i count($out[1]); $i++)
  {
    print 
$out[1][$i]."<br>";   // время
     
print $out[2][$i]."<br>";   // ссылка
    
print $out[3][$i]."<br>";   // название
    // код записи в БД
  
}
}
$url "http://tv.mail.ru/?date=2007-05-23&gosetup=1&period=3&channel=1";
GetInfo($url);
?>

Ссылки можете использовать для того чтобы програбить др. страницы

   
 
 автор: mr Bin   (23.05.2007 в 00:09)   письмо автору
 
   для: mefestofel   (23.05.2007 в 00:01)
 

Спасибо, брат! Видел я такой скрипт для другова примера, но не разобрался :) Ща буду вникать, и ещё раз спасибо!

   
 
 автор: mefestofel   (23.05.2007 в 00:43)   письмо автору
 
   для: mr Bin   (23.05.2007 в 00:09)
 

> Видел я такой скрипт для другова примера
Наверное мой...

Не за что, обращайтесь...

   
 
 автор: kasmanaft   (22.05.2007 в 17:00)   письмо автору
 
   для: mr Bin   (22.05.2007 в 15:20)
 

да всего ничего, напише движок браузера и всё.. можно даже текстовый ;-)

   
 
 автор: CrazyAngel   (22.05.2007 в 17:04)   письмо автору
 
   для: mr Bin   (22.05.2007 в 15:20)
 

все что между "<" и ">" заменять на ""

   
 
 автор: mr Bin   (22.05.2007 в 18:17)   письмо автору
 
   для: CrazyAngel   (22.05.2007 в 17:04)
 

Хм, впринципе идея. Не могли бы более способствующе помочь :)
Ещё же надо сохранить построчность, тоесть чтобы записи были как и в таблице, столбиком.. а не сплошным тестом..

   
 
 автор: HeNuS   (23.05.2007 в 18:19)   письмо автору
 
   для: mr Bin   (22.05.2007 в 18:17)
 

html таблицы в своей структуре имеют все необходимые данные, для того, чтобы их перевести в текст с разделителями\массив\etc...

поэтому забываем про медленный preg_match_all и:


// перевод html таблицы в текст с разделителями
// итоговый текст содержит :
// разделитель строк - символ переноса (\n) 
// разделитель ячеек - симов "|"
function htmltable_to_array ($string) {
    $temp_data=preg_match("|<table(.*?)<\/table>|is", $string,$out);  // проверяю, таблица ли это
    if ($temp_data==1) {
    $string=str_replace("|","/",$string);               // заменяю символ разделителя 
    $string=str_replace("\r"," ",$string);              // убираю символы переноса раз
    $string=str_replace("\n"," ",$string);              // убираю символы переноса два
    $string=preg_replace("/( |\t)+/"," ",$string);      // сжимаю пробелы и табуляцию 
    $string=str_replace("</tr>","\n",$string);          // делаю разделитель строк
    $string=str_replace("</td>","|",$string);           // делаю разделитель ячеек  
    $string=preg_replace ("@</?[^>]*>*@", "", $string); // убиваю все теги
    $string=preg_replace("/(\n)+/","\n",$string);       // убиваю пустые строки
    $string=preg_replace("/\|\n/","\n",$string);        // убиваю пустые ячейки в конце
    return $string;
    }
    else return false;
}


результат -
1|Текст 1
2|Текст 2
3|Текст 3
4|Текст 4

единственный скользкий момент - замена разделителя "|" на "/". (если символ "|" встречается в тексте - таблица поплывет)
если символ "|" внутри текста критичен - нужно брать другой идентификатор разделителя ячеек

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования