Парсинг таблиц с сохранением структуры

Grut

Client
Регистрация
23.04.2010
Сообщения
32
Благодарностей
1
Баллы
8
Здравствуйте,

Помогите советом, пожалуйста. Не могу разобраться как правильно сконструировать шаблон:

Задача
Спарсить на странице цену и параметры продукта с сохранением в csv-файл. Одно из условий - на каждой странице присутствует разное количество параметров.

К примеру:
На странице topills.com/order-viagra.html необходимо получить данные про наименование, вес, количество единиц в упаковке и стоимость продукта. А сохранять в csv-файл в таком виде:
Код:
Viagra;50mg;10 pills;99.00;http://www.topills.com/order-viagra.html
Viagra;50mg;20 pills;139.00;http://www.topills.com/order-viagra.html
...
Viagra;100mg;30 pills;335.00;http://www.topills.com/order-viagra.html
Viagra;100mg;40 pills;399.00;http://www.topills.com/order-viagra.html
Для каждого элемента я создал необходимую регулярку, но тут возникла проблема как сохранять полученные данные в столбик?
И если парсинг/сохранение наименования не вызывает проблем, то сохранение строк параметров (вес, стоимость и т.п.) с сохранением принадлежности вводит меня в ступор.

Регулярка для парсинга параметра quantity:
Код:
(?<=\<TD class\=quantity\>)[\w\W]*?(?=\<\/TD\>)
отдает 11 строк.
Регулярка для парсинга параметра price выдает такое же количество.

Вот как теперь сохранить полученные данные в столбик (чтоб было как в примере) я не знаю :(

Додумался до варианта парсить каждый элемент данных отдельно и, после, конструировать сложную команду сохранения результатов в файл. Но в таком случае мне придется для этой страницы делать минимум 22 регулярки! Плюс становится невозможным авто парсинг других страниц сайта, поскольку там совсем другое количество строк.

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

Вложения

step85

Client
Регистрация
19.02.2010
Сообщения
1 839
Благодарностей
287
Баллы
83
Сначала выпарсивайте информация об всех таблетках вцелом и сохраняйте в файле. Затем берите из этого файла по одному блоку и выпарсивайте из него нужные данные и снова сохраняйте в файл уже в чистовом варианте

PHP:
<TR class=even>
<TD class=quantity>50 Pills</TD>
<TD class=price>$ 314.00</TD>
<TD class=per_pill><B>$ 6.28</B></TD>
<TD class=returning><STRONG>$ 282.00</STRONG></TD>
<TD class=bonus><SPAN>----</SPAN></TD>
<TD><A class=buy href="/checkout.php?item_id=8&amp;update_cart=1">Add to cart</A></TD></TR>
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 712
Баллы
113
Логика мне понятна полностью. Я легко сейчас могу выпарсить единичное выражение из любого кода практически . Есть ступор в определенном моменте:

1) сохраняем в 1 файле блоки аналогичные тому, что вы написали. Друг за другом.
2) потом регулярками тащим несколько раз необходимые профильные данные и сохраняем списком в каждом отдельном файле? Файл "цена", файл "количество таблеток"?

А как потом соединить данные из НЕСКОЛЬКИХ файлов в один? Вот здесь хотел бы пример. Как заставить его дергать строчки в каждом файле по-порядку и соответственные строки соединить в нужные нам группы данных.

Файл один:

50 руб
100 руб
78 руб

файл второй:

100 мг
20 мг
30 мг

Нам нужно:

50 руб:100 мг
100 руб:20 мг

И тд

Прошу прощение за непонимание
 

step85

Client
Регистрация
19.02.2010
Сообщения
1 839
Благодарностей
287
Баллы
83
Логика мне понятна полностью. Я легко сейчас могу выпарсить единичное выражение из любого кода практически . Есть ступор в определенном моменте:

1) сохраняем в 1 файле блоки аналогичные тому, что вы написали. Друг за другом.
2) потом регулярками тащим несколько раз необходимые профильные данные и сохраняем списком в каждом отдельном файле? Файл "цена", файл "количество таблеток"?

А как потом соединить данные из НЕСКОЛЬКИХ файлов в один? Вот здесь хотел бы пример. Как заставить его дергать строчки в каждом файле по-порядку и соответственные строки соединить в нужные нам группы данных.

Файл один:

50 руб
100 руб
78 руб

файл второй:

100 мг
20 мг
30 мг

Нам нужно:

50 руб:100 мг
100 руб:20 мг

И тд

Прошу прощение за непонимание
Вы неправильно поняли. В файл сохраняется именно приведенный выше кусок, со всеми тегами. А затем мы берем из файла этот же кусок и распарсиваем его несколькими регулярками.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 712
Баллы
113
Так как у нас таких кусков НЕ ОДИН, я дальше не понимаю как, выпарсив из текста регулярками однотипные данные (цвет, вес и тд), которых у нас БОЛЬШЕ, чем 1, соединить их друг с другом по соответствию.

Ведь после каждого прохода регуляркой у нас будет новый СПИСОК данных, а не одно выражение, которое потом можно куда-то присобачить :huh:


Пример:

<TR class=even>
<TD class=quantity>50 Pills</TD>
<TD class=price>$ 314.00</TD>
<TD class=per_pill><B>$ 6.28</B></TD>
<TD class=returning><STRONG>$ 282.00</STRONG></TD>
<TD class=bonus><SPAN>----</SPAN></TD>
<TD><A class=buy href="/checkout.php?item_id=8&amp;update_cart=1">Add to cart</A></TD></TR>
<TR class=even>
<TD class=quantity>100 Pills</TD>
<TD class=price>$ 500.00</TD>
<TD class=per_pill><B>$ 6.28</B></TD>
<TD class=returning><STRONG>$ 282.00</STRONG></TD>
<TD class=bonus><SPAN>----</SPAN></TD>
<TD><A class=buy href="/checkout.php?item_id=8&amp;update_cart=1">Add to cart</A></TD></TR>
Как из этого уже получить

50 Pills: $314.00
100 Pills: $500.00

Мы же должны соединять будем два списка

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

step85

Client
Регистрация
19.02.2010
Сообщения
1 839
Благодарностей
287
Баллы
83
Из файла берется ТОЛЬКО ОДИН БЛОК С ДАННЫМИ, а не несколько. Поэтому проблем распарсить его нету никаких. Т.е. надо делать 2 шаблона - один сохраняет блоки с данными в файл, а второй - берет по одному блоку и распарсивает.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 712
Баллы
113
Из файла берется ТОЛЬКО ОДИН БЛОК С ДАННЫМИ, а не несколько. Поэтому проблем распарсить его нету никаких. Т.е. надо делать 2 шаблона - один сохраняет блоки с данными в файл, а второй - берет по одному блоку и распарсивает.
Теперь вроде бы понятно ) Благодарю за терпение, честное слово )
Попробую :az:
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)