Regex: Много одинаковых элементов на странице

Stelsgrower

Client
Регистрация
21.12.2018
Сообщения
134
Благодарностей
62
Баллы
28
Как можно спарсить регуляркой из кода html именно то, что нужно, когда в коде много одинаковых тэгов?
К примеру:
<table class="table-clear table-content-test">
<thead>
<tr>
<th>Данные</th>
<th class="text-right">День</th>
<th class="text-right">Неделя</th>
<th class="text-right">Месяц</th>
</tr>
</thead>
<tbody>
<tr>
<td>Просмотры</td>
<td class="text-right">18 439</td>
<td class="text-right">129 074</td>
<td class="text-right">553 173</td>
</tr>
<tr>
<td>Посетители</td>
<td class="text-right">6 915</td>
<td class="text-right">48 404</td>
<td class="text-right">207 446</td>
</tr>

Нужно получить только последние цифры после "Посетители".
Итог должен выглядеть примерно вот так:
6 915
48 404
207 446

 

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
можно разбить на два шага, сначала спарсить то что начинается с <td>Посетители</td> и заканчивается </tr> - разрешить перенос строки
потом то что спарсилось - распарсить регуляркой - до искомого текста - "text-right"> , и после искомого текста </td>
 

Stelsgrower

Client
Регистрация
21.12.2018
Сообщения
134
Благодарностей
62
Баллы
28
можно разбить на два шага, сначала спарсить то что начинается с <td>Посетители</td> и заканчивается </tr> - разрешить перенос строки
потом то что спарсилось - распарсить регуляркой - до искомого текста - "text-right"> , и после искомого текста </td>
Дело в том, что в код очень длинный и там много раз встречается </td>. Если сделать "разрешить перенос" то он выдает огромный код на выходе:

 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Как можно спарсить регуляркой из кода html именно то, что нужно, когда в коде много одинаковых тэгов?
К примеру:
<table class="table-clear table-content-test">
<thead>
<tr>
<th>Данные</th>
<th class="text-right">День</th>
<th class="text-right">Неделя</th>
<th class="text-right">Месяц</th>
</tr>
</thead>
<tbody>
<tr>
<td>Просмотры</td>
<td class="text-right">18 439</td>
<td class="text-right">129 074</td>
<td class="text-right">553 173</td>
</tr>
<tr>
<td>Посетители</td>
<td class="text-right">6 915</td>
<td class="text-right">48 404</td>
<td class="text-right">207 446</td>
</tr>

Нужно получить только последние цифры после "Посетители".
Итог должен выглядеть примерно вот так:
6 915
48 404
207 446
Парсите статистику с сайта pr-cy?
Берете регуляркой, а потом выбираете нужное совпадение.
Код:
(?<=<td\ class="text-right">)[\w\W]*?(?=</td>)
P.S. И не забудьте удалить конеченные пробелы между цифрами (только скопируйте это отступ, там другая кодировка чем у обычного пробела).
 
Последнее редактирование:
  • Спасибо
Реакции: Stelsgrower

Stelsgrower

Client
Регистрация
21.12.2018
Сообщения
134
Благодарностей
62
Баллы
28
Парсите статистику с сайта pr-cy?
Берете регуляркой, а потом выбираете нужное совпадение.
Код:
(?<=<td\ class="text-right">)[\w\W]*?(?=</td>)
P.S. И не забудьте удалить конеченные пробелы между цифрами (только скопируйте это отступ, там другая кодировка чем у обычного пробела).
Вы сначала кладете все в перменную и уже потом еще раз regex'ом парсите то что нужно?
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Вы сначала кладете все в перменную и уже потом еще раз regex'ом парсите то что нужно?
Можете по разному сделать.
1. Парсить всё в список и брать из списка нужную по номеру строку.
2. Регуляркой выбирать одно совпадение и указывать номер этого совпадения.
Я делаю так:
4.png
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
ТС, выложите полный код страницы и ту часть которую надо спарсить, так проще помочь будет
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Соре, вспомнил, что это не работает для web версии, если парсить полностью из всего DOM.
Лучше парсить из текста страницы такой регуляркой:
Код:
(?<=\ \ \ \ \ \ \ )\d[\w\W]*?(?=\ )
И также выбирать по номеру совпадения.
P.S. Лул, тоже работает. КЕК.
 
Последнее редактирование:

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63

Stelsgrower

Client
Регистрация
21.12.2018
Сообщения
134
Благодарностей
62
Баллы
28
Соре, вспомнил, что это не работает для web версии, если парсить полностью из всего DOM.
Лучше парсить из текста страницы такой регуляркой:
Код:
(?<=\ \ \ \ \ \ \ )\d[\w\W]*?(?=\ )
И также выбирать по номеру совпадения.
Я работаю с пост-гет, там чисто код html. Зачем подгружать комп, если в ответе на гет все выдает о посещаемости и тд.
 
  • Спасибо
Реакции: gevolushn

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
первая регулярка такая как я написал - (?<=<td>Посетители</td>)[\w\W]*?(?=</tr>)
она возьмёт самое короткое совпадение, а дальше аналогично
 
  • Спасибо
Реакции: Stelsgrower

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
интересно, при гет запросе на любом сайте выдает
Код:
Посещаемость
Информация о посетителях и просмотрах сайта.
Нет данных
при веб запросе все ок ...
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
да это понятно, в лом было реализовывать и разбираться ))
сделал так, просто для наглядности
 

Вложения

  • Спасибо
Реакции: Stelsgrower

Stelsgrower

Client
Регистрация
21.12.2018
Сообщения
134
Благодарностей
62
Баллы
28

Stelsgrower

Client
Регистрация
21.12.2018
Сообщения
134
Благодарностей
62
Баллы
28
Парсите статистику с сайта pr-cy?
Берете регуляркой, а потом выбираете нужное совпадение.
Код:
(?<=<td\ class="text-right">)[\w\W]*?(?=</td>)
P.S. И не забудьте удалить конеченные пробелы между цифрами (только скопируйте это отступ, там другая кодировка чем у обычного пробела).
Пожалуй Ваш вариант самый верный и простой. Применил приведенную в пример регулярку и выбрал то, что нужно по номеру совпадения. Большое спасибо!
 
  • Спасибо
Реакции: gevolushn

arhip1985

Client
Регистрация
31.10.2011
Сообщения
2 955
Благодарностей
781
Баллы
113
если устраивало брать по номеру совпадения - то почему тогда тему создавали, что много одинаковых элементов)
 

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