Парсинг

drongo

Client
Регистрация
08.10.2010
Сообщения
29
Благодарностей
2
Баллы
3
Привет
Подскажите регулярку для парсинга:

HTML:
<td>

             <a href="/296351/">

             <img id="i296351" class="lazy" border="0" src="/img/td1.png" data-original="http://www.com/thumbs/296/351/thumb2.jpg" width="240" height="180" onmouseover="javascript:mstart(296351, 'http://www.com/thumbs/296/351/')" onmouseout="javascript:mstop(296351)"><br>

             Какой то текс тут...</a>

     <div>
       <div id="category"><a href='/category/10/категория/'>Категория</a>; <a href='/category/15/категория/'>Категория</a>; <a href='/category/20/Каегория2/'>Категория2</a></div>

     </div>

          
          <script language="JavaScript" type="text/javascript">stat[296351]=0; pic[296351]=new Array(); pics[296351]=new Array("2","4","6","8","10","12","14","16", "18", "20", "22", "24");</script>

          
   
    </td>
Нужно выпарсить:
http://www.com/thumbs/296/351/thumb2.jpg;Категория, Категория2;/296351/

В третьем постере все на ура парсил пару лет назад, теперь никак ничего не парсит... Обновился до пятого... Я что-то пропустил?
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
893
Баллы
113
(?<=data-original=").*?(?=")
(?<=<div\ id="category">.*?>).*?(?=</a>)
категорию 2 аналогичным макаром
(?<=stat\[).*?(?=])
 
  • Спасибо
Реакции: drongo

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 653
Благодарностей
8 781
Баллы
113
потерто самокритикой.. :-)
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 884
Баллы
113
(?<=<a\ href=").*?(?=">) - /296351/
(?<=data-original=").*?(?=") - http://www.com/thumbs/296/351/thumb2.jpg

С категориями несколько сложнее:
Сначала получаем текст вот такой регуляркой (она достаточно приблизительная, т.к. составленна по конкретному куску кода, возможно для всего сайта и не сработает.
(?<=category"><a\ href='/category/\S+/'>.*?</a>;\ <a\ href='/category/\S+/'>).*?(?=</a></div>)
Дальше из полученного текста - Категория</a>; <a href='/category/20/Каегория2/'>Категория2
удаляем лишнее регулркой </a>.*?'>
и делаем замену на запятую.
Вот приблизительно как то так.
 
  • Спасибо
Реакции: drongo

drongo

Client
Регистрация
08.10.2010
Сообщения
29
Благодарностей
2
Баллы
3
а "Какой то текс тут..." ?

(?<=height="180"><br>).*(?=</a>) не парсит
 

drongo

Client
Регистрация
08.10.2010
Сообщения
29
Благодарностей
2
Баллы
3
(?<=height="180"><br>\r\n).*(?=</a>) вроде заработало

(?<=<a\ href=").*?(?=">) - /296351/
это не парсит. Как сделать чтобы <td> было в этом выражении?
(?<=<td>\r\n<a\ href="/).*(?=/">) так не хочет
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 884
Баллы
113
(?<=height="180"><br>\r\n).*(?=</a>) вроде заработало

(?<=<a\ href=").*?(?=">) - /296351/
это не парсит. Как сделать чтобы <td> было в этом выражении?
(?<=<td>\r\n<a\ href="/).*(?=/">) так не хочет
(?<=<td>\r\n\s+<a\ href="/).*(?=/">)
 
  • Спасибо
Реакции: drongo

drongo

Client
Регистрация
08.10.2010
Сообщения
29
Благодарностей
2
Баллы
3
А как лучше организовать работу шаблона?
Тоесть я парсю ссылки с картинок, допустим их получается 290 совпадений, парсю сами картинки их тоже 290, потом текст под картинками... но текст есть не у каждой картинки... вот как сделать чтобы все данные что есть записать в файл?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Если нужно сохранять соответствия "текст" - "картинка", то изначально нужно парсить не отдельно их а парсить блоки кода, в которых будет и ссылка на картину и текст если есть.
И потом брать каждый блок и оттуда парсить то что там есть в наличии.
 

drongo

Client
Регистрация
08.10.2010
Сообщения
29
Благодарностей
2
Баллы
3
HTML:
   <td>
            <a href="/296540/">
            <img id="i296540" class="lazy" src="/img/td1.png" data-original="http://www.com/thumbs/296/540/thumb1.jpg" onmouseover="javascript:mstart(296540, 'http://www.com/thumbs/296/540/')" onmouseout="javascript:mstop(296540)" border="0" width="240" height="180"><br>
            Текст под картинкой.</a>
    <div>
      <div id="category"><a href="/category/10/Категория1/">Категория1</a>; <a href="/category/16/Категория2/">Категория2</a>; <a href="/category/19/Категория3/">Категория3</a>; <a href="/category/20/Категория4/">Категория4</a>; <a href="/category/36/Категория5/">Категория5</a></div><div id="time">35:14 мин.</div>
    </div>
         
         <script language="JavaScript" type="text/javascript">stat[296540]=0; pic[296540]=new Array(); pics[296540]=new Array("2","4","6","8","10","12","14","16", "18", "20", "22", "24");</script>
         


   </td>
(?<=<td>\r\n\s+<a\ href="/).*(?=</a></div><div\ id="time">)
почему рег выражение не работает? хочу спарсить весь блок....
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Зачем усложнять?
(?<=<td>)[\w\W]*?(?=<div\ id="time">)
 
  • Спасибо
Реакции: drongo

drongo

Client
Регистрация
08.10.2010
Сообщения
29
Благодарностей
2
Баллы
3
так, к сожалению, ничего не парсит
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
Из примера выше парсит.
Значит исходные данные даете не те :-)
 

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