Как спарсить значение в теге <tr...>?

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Как спарсить значение в теге <tr...>?

<tr data-guid="535faef1d78697868413d1dd5" class="selected">
...
...
...</tr>

в данном случай нужен 535faef1d78697868413d1dd5 на странице их много по этому надо все спарсить

делал по классу не показывает ничего
 

Вложения

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 551
Баллы
113
Код:
(?<=tr data-guid=")[^"]+
делал по классу не показывает ничего
SET - это установить значение.
А Вам нужен GET.

И что-то мне подсказывает, что class указан не везде, где есть data-guid.
 

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
да знаю, просто данных небыло по этому не трогал их...

Вы правы. class там в 1-2 местах... в основном так <tr data-guid="535faef1d78697868413d1dd5">

Как правильно вставить? как то не работал с регулярками
 

Вложения

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 551
Баллы
113
Таким способом Вы сможете получить только одно значение. Далее нужно будет в цикле пройтись по номерам совпадений - от 0 и до конца, если нужны все.
Я Вам предлагаю воспользоваться кубиком обработки текста, выбрав регулярные выражения.
 
  • Спасибо
Реакции: art22

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Теперь понятно как работает) Спасибо. Надо разбираться как создать рег выражения...
Сохранил в Таблицу...

Подскажи пожалуйста как спарсить то что внутри tr таблицу... можно как то по счету спарсить так же? скажем нужны только 2,3,8,9,10 столбцы, то что выделено...

<tr data-guid="535faef1d78697868413d1dd5">
<td class="e"></td>
<td class="c">2000</td>
<td class="c">67401</td>
<td class="l">29.05.18 10:10</td>
<td class="l">29.05.18 10:05</td>
<td class="trim"></td>
<td class="trim">Без</td>
<td class="trim c selected" style="background-color:#ff8000">тип</td>
<td class="r">200,00</td>
<td class="r">1,00</td>
<td class="r">0,00</td>
<td class="r">10:05</td>
<td class="r">10:05</td>
<td class="r">10:05</td>
<td class="trim">Шта</td>
<td class="l"></td>
<td class="c">10:05</td>
<td class="c">10:08</td>
<td class="c">00:00</td>
<td class="c">10:09</td>
<td class="c">10:16</td>
<td class="trim"></td></tr>
 

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Значения, сильно меняются?
2000
67401
200,00
1,00
 

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Первые 2 нет, просто увеличиваются...

А где тип 3х видов. текст

3й и 4й суммы... от 1,00 до 1000,00
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 175
Благодарностей
2 177
Баллы
113
Теперь понятно как работает) Спасибо. Надо разбираться как создать рег выражения...
Сохранил в Таблицу...

Подскажи пожалуйста как спарсить то что внутри tr таблицу... можно как то по счету спарсить так же? скажем нужны только 2,3,8,9,10 столбцы, то что выделено...

<tr data-guid="535faef1d78697868413d1dd5">
<td class="e"></td>
<td class="c">2000</td>
<td class="c">67401</td>
<td class="l">29.05.18 10:10</td>
<td class="l">29.05.18 10:05</td>
<td class="trim"></td>
<td class="trim">Без</td>
<td class="trim c selected" style="background-color:#ff8000">тип</td>
<td class="r">200,00</td>
<td class="r">1,00</td>
<td class="r">0,00</td>
<td class="r">10:05</td>
<td class="r">10:05</td>
<td class="r">10:05</td>
<td class="trim">Шта</td>
<td class="l"></td>
<td class="c">10:05</td>
<td class="c">10:08</td>
<td class="c">00:00</td>
<td class="c">10:09</td>
<td class="c">10:16</td>
<td class="trim"></td></tr>
Делал такое с HTML-таблицой. Не хочу мудрить, но пришлось таким алгоритмом пользоваться:

1. Get-запросом спарсил код странцы.
2. Через C# xpath (html agility pack) прошелся в цикле по каждой строке таблицы, а в ней дополнительным циклом по каждой ячейке. При этом считывал значения ячеек и сразу заполнял ими ZennoPoster-таблицу (IZennoTable).
3. В итоге получил обычную зеновскую таблицу с теми данными из HTML-таблицы. А с ней уже проделывал популярные операции по взятию значений конкретной ячейки, сохранение таблицы в эксель файл и т.д.
 
Последнее редактирование:

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
Я бы спарсил всю таблицу
Код:
(?<=<tr)[\w\W]*?(?=</tr>)
Если таблица всегда с таким количеством ячеек. то можно просто закинуть код в файл, файл сделать списком. После удалять строки по номеру. После удалить html код.
 

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Трудновато пока для меня это все.
Парсер из зена постер очень тяжёлый... Можно было в Датаколе задать начало и конец... и он бы спарсил все что нужно. А тут не понимаю как регулярка работает, вроде задаю начало и конец регулярка не работает...
 

Вложения

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43
А это идея. Можно как то сразу по колонкам распределить?
Спарси всю таблицу, и методом исключения удаляй ненужные строки.
У меня это получилось в пять этапов.
вроде задаю начало и конец регулярка не работает...
Галочку поставь. Разрешить переносы.
 
Последнее редактирование:

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 066
Благодарностей
8 957
Баллы
113
Трудновато пока для меня это все.
Парсер из зена постер очень тяжёлый... Можно было в Датаколе задать начало и конец... и он бы спарсил все что нужно. А тут не понимаю как регулярка работает, вроде задаю начало и конец регулярка не работает...
С исходником из вашего предыдущего поста:
Код:
<tr data-guid="535faef1d78697868413d1dd5">
<td class="e"></td>
<td class="c">2000</td>
<td class="c">67401</td>
<td class="l">29.05.18 10:10</td>
<td class="l">29.05.18 10:05</td>
<td class="trim"></td>
<td class="trim">Без</td>
<td class="trim c selected" style="background-color:#ff8000">тип</td>
<td class="r">200,00</td>
<td class="r">1,00</td>
<td class="r">0,00</td>
<td class="r">10:05</td>
<td class="r">10:05</td>
<td class="r">10:05</td>
<td class="trim">Шта</td>
<td class="l"></td>
<td class="c">10:05</td>
<td class="c">10:08</td>
<td class="c">00:00</td>
<td class="c">10:09</td>
<td class="c">10:16</td>
<td class="trim"></td></tr>
получилось таким образом:

upload_2018-5-30_0-45-53.png
Регулярка:
Код:
(?<=<td\ class="e"></td>\n.*?<td\ class="c">).*?(?=</td>\n.*?<td\ class="c">)
Но скорее всего на реальном исх. коде потребуется другая..
Скиньте реальный исх. код с отступами, в тегах
Код:
.. тут ..
 
  • Спасибо
Реакции: art22

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Вот это другое дело) знакомые функции...\n.*? и n.*? все что нужно собрал!

  1. <td class="r">200,00</td>
  2. <td class="r">1,00</td>
  3. <td class="r">0,00</td>
НО Эти части одинаковые идут не за что ухватиться... Нужны первые 2 ячейки...</td><td class="r"> так если взять берет другие тоже..
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 066
Благодарностей
8 957
Баллы
113
Вот это другое дело) знакомые функции...\n.*? и n.*? все что нужно собрал!

  1. <td class="r">200,00</td>
  2. <td class="r">1,00</td>
  3. <td class="r">0,00</td>
НО Эти части одинаковые идут не за что ухватиться... Нужны первые 2 ячейки...</td><td class="r"> так если взять берет другие тоже..
Можно вот так извратиться:

upload_2018-5-30_2-41-40.png

Регулярка:
Код:
((?<=<td\ class=".*"\ style=".*">.*</td>\n.*<td\ class="r">).*?(?=</td>))|((?<=<td\ class=".*"\ style=".*">.*</td>\n.*<td\ class="r">.*</td>\n.*<td\ class="r">).*?(?=</td>))

или

((?<=<td\ class=".*"\ style=".*">.*</td>\r\n.*<td\ class="r">).*?(?=</td>))|((?<=<td\ class=".*"\ style=".*">.*</td>\r\n.*<td\ class="r">.*</td>\r\n.*<td\ class="r">).*?(?=</td>))
Прописать ее в экшен Обработка текста Regex, Все, В список.
Из списка брать с удалением первую строку в соотв. переменные..
(два экшена Операции над списком)

upload_2018-5-30_2-44-57.png

PS: Сейчас подтянутся спецы по групповым регуляркам и посоветуют более оптимально решение.
Но если важны не шашечки, а уже ехать, то можно и так.. :-)
 
  • Спасибо
Реакции: art22

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 640
Баллы
113
Код:
<tr[^>]*>\s*<td[^>]*>[^>]+>\s*<td[^>]*>([^<]*)</td>\s*<td[^>]*>([^<]*)</td>\s*<td[^>]*>[^>]+>\s*<td[^>]*>[^>]+>\s*<td[^>]*>[^>]+>\s*<td[^>]*>[^>]+>\s*<td[^>]*>([^<]*)</td>\s*<td[^>]*>([^<]*)</td>\s*<td[^>]*>([^<]*)</td>
развлекайся)
 
  • Спасибо
Реакции: art22, Sergodjan и inilim

inilim

Client
Регистрация
16.09.2017
Сообщения
446
Благодарностей
170
Баллы
43

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 640
Баллы
113

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
сам. там много повторов ради красивой картинки результата)
Где так же научиться?) где эти курсы?) а то часто приходиться пропускать рег выражения и придумать что то новое)

А как можно еще другие добавить? скажем
  1. <td class="r">10:05</td> 13й идет по счету
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 175
Благодарностей
2 177
Баллы
113
Где так же научиться?) где эти курсы?) а то часто приходиться пропускать рег выражения и придумать что то новое)

А как можно еще другие добавить? скажем
  1. <td class="r">10:05</td> 13й идет по счету
Перепост со складчика:

#2. Регулярки
(Wikipedia: Регулярные выражения).
Используются для более расширенного поиска\замены в тексте.
#2.1.1. Для теории рекомендую прочитать страницы №24 - 60 этой книжки:
«Friedl J. / Фридл Дж. - Mastering Regular Expressions / Регулярные выражения».
#2.1.2. А под рукой поначалу можно держать эту картинку-шпаргалку:
http://www.exlab.net/files/tools/sheets/regexp/regexp.png

Статья авторов шпаргалки с разъяснениями/
#2.1.3. Ну и книга с примерами построения логики на разных жизненных задачах:
«Ян Гойвертс, Стивен Левитан - Регулярные выражения. Сборник рецептов».

#2.2. Моя глубока практика с регулярками началась на ZennoPoster с его инструментом «Конструктор регулярных выражений». Там же есть и статья по основным популярным задачам: "Регулярные выражения, что это такое и с чем их едят?"

Зачем это нам, если нет лицензии Зенки спросите вы? Да не проблема, ибо какой-то безызвестный добрый человек портировал этот конструктор в обычную бесплатную утилиту. Скачать архивом (обсуждение и исходники на форуме зенки).
За корректную работу всех функций я не ручаюсь, ибо в работе не использую, но на первый взгляд работает, жалоб нет.

#2.3. Вот что еще нагуглил интересное для тестирования регулярок:
#2.3.1. Хабр: Визуальный генератор регулярных выражений (сервис онлайн)

#2.3.2. https://regex101.com/ (сервис онлайн)
#2.3.3. PowerGREP Screen Shots Visual Search and Replace Utility.

#2.4. Под любую задачу можно нагуглить готовое решение. Правда в каждом языке программирования, а соответственно и в каждой программе синтаксис использования регулярок может чуть-чуть различаться (в пределах нескольких процентов).

#2.4.1. Я в своей практике заметил, что слишком сложные регулярки (с множеством разных условий и костылей :-)) не всегда поддерживаются. Приблизительно коэффициент поддержки сложных регулярок можно так выразить:
  • ZennoPoster C# блоки (кодинг) = 99%
  • ZennoPoster обычные кубики = 90%
  • EmEditor = 85%
  • Notepad++ = 70%
  • Gnu (консоль Linux\Unix) = 90%
  • GnuWin32 (порт консоли Linux\Unix в Windows) = 80%
 
Последнее редактирование:
  • Спасибо
Реакции: art22

art22

Client
Регистрация
24.06.2016
Сообщения
484
Благодарностей
69
Баллы
28
Разобрался в формуле отличная штука)) можно собрать Любые таблицы)
--

так как первый столбец берет весь код таблицы...
решил отдельно Спарсить data-guid в столбец 1.

Потом через второй кубик спарсить "всю" таблицу... и добавить в ячейку 2 И Т П...

Ставлю исключить 1 столбец, почему то не работает... Может программа глючит или нельзя так делать? не парсит ничего.

Ради эксперимента хотел те же значения поставить в второй столбец

 

Вложения

Последнее редактирование:

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