1

Тема: Регулярні вирази в python. Парсинг html

Всім привіт. Тут таке діло, треба пропарсити сайт без використання додаткових бібліотек (beautifulSoup і їй подібних), а тільки регекспами. Працюю вперше з цим, тому не зовсім розумію побудову регулярних виразів. Треба витягнути все що між тегами tr. Ось такий вираз склав: "<tr class="centered none">(\s.*)</", витягує все до першого </td>, якщо замість "</" вказати "</tr>" - не витягує взагалі нічого. Може хто що порадить. Буду вдячним за допомогу.

Прихований текст

http://www.codeabbey.com/index/user_ranking - сторінка, яку треба пропарсити, витягнути номер, нік, ранг ...

Подякували: 0xDADA11C71

2

Re: Регулярні вирази в python. Парсинг html

Раджу почитати це та попрактикуватися тут. А ваш вираз згубило екранування, тобто замість </ пишіть <\/. Ще пишіть для вибірки це (.+)

Подякували: navchalkin, koala2

3 Востаннє редагувалося navchalkin (29.03.2017 23:38:39)

Re: Регулярні вирази в python. Парсинг html

0xDADA11C7 написав:

Раджу почитати це та попрактикуватися тут. А ваш вираз згубило екранування, тобто замість </ пишіть <\/. Ще пишіть для вибірки це (.+)

Ну, екранування не допомогло, пробував з ним. А "+" - ревнивий квантифікатор? Чи ким він виступає в даній ситуації? Бо я заплутався.
А за посиланнячко на цікаву статтю дякую!)

4 Востаннє редагувалося NaharD (30.03.2017 07:46:51)

Re: Регулярні вирази в python. Парсинг html

Даний вираз буде шукати будь-які символи перед яким повинен йти один пропуск

navchalkin написав:

"<tr class="centered none">(\s.*)</"

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

"<tr class="centered none">[\s.*]</"

Оскільки крапка означає будь-який символ (і пропуск теж) вираз буде виглядати так - <tr class="centered none">.+<\/tr>
Тобто, в даному випадку, ніяких множин не треба.

Прихований текст

+ - один, або більше
* - нуль, або більше

Прихований текст

Доречі, ваш блог змінив адресу, чи закрився?

Подякували: navchalkin1

5 Востаннє редагувалося navchalkin (30.03.2017 09:42:37)

Re: Регулярні вирази в python. Парсинг html

Крапка не є \n, але як вже дочитався, потрібно включити DOTALL:) І так, допомогло, за що дуже вдячний!

NagarD написав:

Оскільки крапка означає будь-який символ (і пропуск теж) вираз буде виглядати так - <tr class="centered none">.+<\/tr>
Тобто, в даному випадку, ніяких множин не треба.

Так, він переїхав на нову адресу, і трохи очистився. Всі свої напрацювання прийшлось видалити через велику кількість неточностей, зараз пишу все з нуля, і скоро він отримає нове життя:) А ще він розширюється, і планується розбавляти 3D технології програмуванням, електронікою і тестуванням мереж )
FreakSpace його ім'я:)

NagarD написав:
Прихований текст

Доречі, ваш блог змінив адресу, чи закрився?

Подякували: NaharD1

6

Re: Регулярні вирази в python. Парсинг html

navchalkin написав:

Крапка не є \n, але як вже дочитався, потрібно включити DOTALL

Так, ви праві.

Прихований текст

Я відкрив свій старий код:

return preg_replace('/<table.*?>[\s\S]*?<\/table>/', '', $this->file);

І подумав, навіщо потрібен такий запис, якщо його може замінити крапка. Я тоді розумів, що крапка це не знесення, але вже забув про це)

Подякували: navchalkin1