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

  • Автор темы Автор темы art22
  • Дата начала Дата начала

art22

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

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

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

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

Вложения

  • 2018-05-29_200049.png
    2018-05-29_200049.png
    9,7 KB · Просмотры: 17
Код:
Развернуть Свернуть Копировать
(?<=tr data-guid=")[^"]+

делал по классу не показывает ничего
SET - это установить значение.
А Вам нужен GET.

И что-то мне подсказывает, что class указан не везде, где есть data-guid.
 
да знаю, просто данных небыло по этому не трогал их...

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

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

Вложения

  • 2018-05-29_210129.png
    2018-05-29_210129.png
    12,2 KB · Просмотры: 19
Таким способом Вы сможете получить только одно значение. Далее нужно будет в цикле пройтись по номерам совпадений - от 0 и до конца, если нужны все.
Я Вам предлагаю воспользоваться кубиком обработки текста, выбрав регулярные выражения.
Usn5MPV.png
 
  • Оценить
Реакции: art22
Теперь понятно как работает) Спасибо. Надо разбираться как создать рег выражения...
Сохранил в Таблицу...

Подскажи пожалуйста как спарсить то что внутри 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>
 
Значения, сильно меняются?
2000
67401
200,00
1,00
 
Первые 2 нет, просто увеличиваются...

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

3й и 4й суммы... от 1,00 до 1000,00
 
Теперь понятно как работает) Спасибо. Надо разбираться как создать рег выражения...
Сохранил в Таблицу...

Подскажи пожалуйста как спарсить то что внутри 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-таблицы. А с ней уже проделывал популярные операции по взятию значений конкретной ячейки, сохранение таблицы в эксель файл и т.д.
 
Последнее редактирование:
Я бы спарсил всю таблицу
Код:
Развернуть Свернуть Копировать
(?<=<tr)[\w\W]*?(?=</tr>)
Если таблица всегда с таким количеством ячеек. то можно просто закинуть код в файл, файл сделать списком. После удалять строки по номеру. После удалить html код.
 
Трудновато пока для меня это все.
Парсер из зена постер очень тяжёлый... Можно было в Датаколе задать начало и конец... и он бы спарсил все что нужно. А тут не понимаю как регулярка работает, вроде задаю начало и конец регулярка не работает...
 

Вложения

  • 2018-05-30_000044.png
    2018-05-30_000044.png
    23,7 KB · Просмотры: 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>

получилось таким образом:

upload_2018-5-30_0-45-53.png
Регулярка:
Код:
Развернуть Свернуть Копировать
(?<=<td\ class="e"></td>\n.*?<td\ class="c">).*?(?=</td>\n.*?<td\ class="c">)

Но скорее всего на реальном исх. коде потребуется другая..
Скиньте реальный исх. код с отступами, в тегах
Код:
Развернуть Свернуть Копировать
.. тут ..
 
  • Оценить
Реакции: art22
Вот это другое дело) знакомые функции...\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"> так если взять берет другие тоже..
 
Вот это другое дело) знакомые функции...\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
Код:
Развернуть Свернуть Копировать
<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>
развлекайся)
0b1e7f31c8d4c596de62134bdcf35407.png
 
  • Оценить
Реакции: art22, Sergodjan и inilim
сам. там много повторов ради красивой картинки результата)
Где так же научиться?) где эти курсы?) а то часто приходиться пропускать рег выражения и придумать что то новое)

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

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

#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
Разобрался в формуле отличная штука)) можно собрать Любые таблицы)
--

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

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

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

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

2018-05-30_135831-png.30067
 

Вложения

  • 2018-05-30_135831.png
    2018-05-30_135831.png
    42,9 KB · Просмотры: 177
Последнее редактирование:

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