Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2012, 15:01   #1
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию Парсер HTML-таблиц. Получение координат ячеек.

Всем привет!
Есть админка для интернет магазина, нужно слить туда инфу из другого и добавить все в БД.
Информация представлена в виде таблиц (table,tr,td c классами и другими атрибутами)
Нужен парсер (preg_match_all).
Я все продумал вплоть до построения MySQL-запросов через два цикла foreach: первый результат - содержимое строчек, второй - содержимое ячеек.
Вся проблема в том, что у меня не получается составить регулярные выражения - из-за атрибутов тегов, переносов строк и т.д.

Помогите пожалуйста составить регулярки на получение содержимого тегов <tr></tr> и <td></td>, которые могут быть представлены по разному:

<tr class="thTr" >Содержимое</tr>
<td valign="middle" class="thTd" align="center" >Содержимое</td>
и т. д.

Буду очень благодарен!
Mr_freeman вне форума Ответить с цитированием
Старый 17.08.2012, 15:13   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Simple HTML DOM Parser
примеры
Andkorol вне форума Ответить с цитированием
Старый 17.08.2012, 15:23   #3
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Хорошая библиотека, не знал о ней. Но я хочу все сам сделать, мне только с регулярками разобраться, я поэтому и обратился сюда.
Mr_freeman вне форума Ответить с цитированием
Старый 17.08.2012, 16:03   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Mr_freeman Посмотреть сообщение
Хорошая библиотека, не знал о ней. Но я хочу все сам сделать, мне только с регулярками разобраться, я поэтому и обратился сюда.
"С регулярками разобраться" и "распарсить страницу" – это несколько разные задачи на сегодняшний день...

Если нужно распарсить быстро и просто – юзай Simple HTML DOM Parser.
Охота возиться с регулярками – изучай.
Функции парсинга web-страниц
Andkorol вне форума Ответить с цитированием
Старый 17.08.2012, 16:27   #5
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Да распарсить - это не проблема, у меня просто не получаются регулярки, я вчера всю ночь просидел, пытался составить, прочитал уже много литературы, но всегда где то ошибки есть.

Например хочу взять все строчки: preg_match_all("/<tr[^>]*>(.*)<\/tr>/",$table,$rows);

Но получается только один результат, видимо он взял самый первый и самый последний. Я до сих пор не могу понять как в конструкции (.*) указать, что не нужно трогать </tr>
Mr_freeman вне форума Ответить с цитированием
Старый 17.08.2012, 16:58   #6
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,160
По умолчанию

... кстати двойной цикл - неверно .. по сути одна строка - одна запись в таблице БД (с нужными полями)
ADSoft вне форума Ответить с цитированием
Старый 17.08.2012, 17:19   #7
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

База данных уже давно готова, я не собираюсь ее менять - и так все прекрасно работает.

Люди, неужели никто не может помочь?
Mr_freeman вне форума Ответить с цитированием
Старый 17.08.2012, 19:35   #8
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Регулярки - вещь, несколько напоминающая тензоры или аналогичные вещи, так что тут нужно терпение, усидчивость, кофе и желание.
Если же нужно написать быстро парсер, я пользуюсь explode. И любой парсер можно сделать быстро.
motorway вне форума Ответить с цитированием
Старый 17.08.2012, 19:41   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Код:
<tr class="thTr" >Содержимое</tr>
<td valign="middle" class="thTd" align="center" >Содержимое</td>
Например, тут:
Код:
$var=explode('<tr class="thTr" >',$string); // или explode('<td valign="middle" class="thTd" align="center">',$string);
$var=explode('</tr>',$var[1]);
echo $var[0];
Если таких строк несколько, делаем в цикле:
Код:
$x=explode($part,$string);
foreach ($x as $elem)
{
$part2=explode('</tr>',$elem);
$part2=$part2[0];
// вот таким образом
};
В общем, это примерно то же, что в такой ситуации: вам нужно куда-то добраться, вы умеете водить обычную машину хорошо, а ещё есть спорткар, но требуется время, чтобы научиться ездить на нём. Зато он быстрее довезёт.
Во многих случаях действительно они помогают что-то сделать проще, есть готовые варианты.
Зато старый добрый explode любую вещь вынет из кода, и код этот пишется быстро и автоматически.
Если есть время и возможность, можно параллельно изучать и регулярки.

Последний раз редактировалось motorway; 17.08.2012 в 19:49.
motorway вне форума Ответить с цитированием
Старый 17.08.2012, 20:18   #10
Mr_freeman
Форумчанин
 
Аватар для Mr_freeman
 
Регистрация: 17.01.2010
Сообщений: 277
По умолчанию

Я не просто так стал использовать регулярки. Дело в том, что парсер должен быть универсальным, потому что очень много различных таблиц.
И еще на этот парсер у меня есть планы в будущем.
Mr_freeman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение координат точки. ТриСемёрки C++ Builder 3 15.12.2011 15:08
получение координат пикселя с заданным цветом JIM88 Общие вопросы Delphi 8 21.02.2011 11:59
WPF Получение 2D координат 3D вектора Eugene123 WPF, UWP, WinRT, XAML 0 09.10.2010 20:15
Получение координат точки. ТриСемёрки Помощь студентам 0 21.05.2010 21:35
Получение координат точек касательной к окружности Stilet Помощь студентам 2 01.08.2008 15:12