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

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

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

 

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

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

тема: Грабинг в два прохода
 
 автор: mishaMC   (14.03.2006 в 11:00)   письмо автору
 
 

Я с помощь сокетов считал страницу в переменную $text

Нужные мне данные содержаться в следующих повторящиюхся фрагментах:


<table width="100%" border='0' cellspacing='0' cellpadding='0' style='margin-top:1px;'>
<tr class=x>
<td width='99%'><a href='?cat_id=18' class='shop'>1 КАРМАННЫЕ КОМПЬЮТЕРЫ (КПК)</a></td>
</tr>
</table>


Мне же нужно выделить в отдельных текстовый файл следующие фрагменты:


a href='?cat_id=18' class='shop'>1 КАРМАННЫЕ КОМПЬЮТЕРЫ (КПК)</a>


На основе этого файла с сылками, будут производится дальнейшие манипуляции.

Помогите пожалуйста написать подходящее для этого разбора и записи в файл регулярное выражение!

   
 
 автор: cheops   (14.03.2006 в 13:47)   письмо автору
 
   для: mishaMC   (14.03.2006 в 11:00)
 

Можно воспользоваться следующим скрптом
<?php 
  $str 
"<table width=\"100%\" border='0' cellspacing='0' cellpadding='0' style='margin-top:1px;'> 
<tr class=x> 
<td width='99%'><a href='?cat_id=18' class='shop'>1 КАРМАННЫЕ КОМПЬЮТЕРЫ (КПК)</a></td> 
</tr> 
</table>
<table width=\"100%\" border='0' cellspacing='0' cellpadding='0' style='margin-top:1px;'> 
<tr class=x> 
<td width='99%'><a href='?cat_id=18' class='shop'>1 КАРМАННЫЕ КОМПЬЮТЕРЫ (КПК)</a></td> 
</tr> 
</table>
<table width=\"100%\" border='0' cellspacing='0' cellpadding='0' style='margin-top:1px;'> 
<tr class=x> 
<td width='99%'><a href='?cat_id=18' class='shop'>1 КАРМАННЫЕ КОМПЬЮТЕРЫ (КПК)</a></td> 
</tr> 
</table>"

  
$pattern "|<tr class=x>[\s]*<td width='99%'>[\s]*(<a[^>]+>[^<]+</a>)|"
  
$str preg_match_all($pattern$str$out); 
  echo 
"<pre>";
  
print_r($out[1]);
  echo 
"</pre>";
?>

   
 
 автор: mishaMC   (14.03.2006 в 16:42)   письмо автору
 
   для: cheops   (14.03.2006 в 13:47)
 

Это выражение работает если обрабатывать только тот код, который я приводил в первом посте данной темы, а если оно будет выглядеть так:


//куча разного кода, включая java скрипты и другие таблицы, но у приведенных ниже,
// только строго этот класс и ссылки только такого вида <a href='?cat_id=какой-то номер&подгруппа' class='shop'>
// И только потом идут повторяющиеся куски кода, но в конце опять разный код

<table width="100%" border='0' cellspacing='0' cellpadding='0' style='margin-top:1px;'> 
<tr class=x> 
<td width='99%'><a href='?cat_id=18' class='shop'>1 КАРМАННЫЕ КОМПЬЮТЕРЫ (КПК)</a></td> 
</tr> 
</table> 


Как сделать, чтобы он все лишнее убирал, выбирая только эти ссылки вида ?cat_id с классом shop?

   
 
 автор: cheops   (14.03.2006 в 22:30)   письмо автору
 
   для: mishaMC   (14.03.2006 в 16:42)
 

Прикрепите к сообщению полную страницу, если не трудно, так как решение будет зависить от "куча разного кода, включая java скрипты и другие таблицы".

   
 
 автор: mishaMC   (16.03.2006 в 09:29)   письмо автору
8.8 Кб
 
   для: cheops   (14.03.2006 в 22:30)
 

Теперь у меня новая задача (вышеперечисленную я решил, кому интересно, могу выложить решение).

Есть страница (в прикрепленном файле)

Из нее меня интерисуют повторяющиеся кусочки:


<tr valign='middle' class='x'>
            <td><a href="/catalog/info.php?prod_id=12045" target="product" onClick="wopenWH('/catalog/info.php?prod_id=12045','product',520,600);"><img src='/images/more.gif' width='16' height='16' border='0'></a></td>
            <td class='shop_name'><a class='shop_link' href="/catalog/info.php?prod_id=12045" target="product" onClick="wopenWH('/catalog/info.php?prod_id=12045','product',520,600);">Ноутбук  Acer Aspire 3003LC / AMD Sempron 3000+, 15.0" XGA,up to 128MB shared, 512 (2*256) MB, 40GB, DVD-CDRW, 10/100 LAN, NO Wi-Fi, Win XPH RU</a></td>
            <td align='right'>808.00</td>
            <td align='right'><input type='text' size='3' name='dbasket[13427][1]' value='' class='shop_field' ></td>
            <td align='right'>5</td>
            <td align='right'><input type='text' size='3' name='dbasket[13427][2]' value=''     class='shop_field2' readonly></td>
            <td align='right'>0</td>
            <td align='right'><input type='text' size='3' name='dbasket[13427][3]' value=''     class='shop_field' ></td>
            <td align='right'>1</td>
            <td><input name='image_field' type='image' border='0' src='/images/tobasket.gif' width='16' height='16' alt='В корзину' title='В корзину'></td>
        </tr>


Кусочков много, посему нужно через цикл пропусить их через регулярное выражение, к-е бы давало такой результат

Наименование товара (табуляция) цена (табуляция) инвентарный номер (табуляция) наличие на складе 1 (табуляция) на складе 2 (табуляция) на складе 3

Эти данные расположенны в одинаковых местах, инвентарный номер хранится в name='dbasket[13427]... в квадратных скобках.

   
Rambler's Top100
вверх

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