Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: экспорт из html  (Прочитано 3967 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #30 : 08 Апреля 2016, 13:36:01 »
под спойлером полный код первого попавшегося файла

(Нажмите, чтобы показать/скрыть)

это какая-то внутренняя борда была, чтоли, толком не знаю, но точно знаю что оно каким-то образом взаимодействовало с Битрикс, а поскольку Битрикса у них больше нет, то и скрипта этого тоже нет, и базы нет, только пачка html на память, вот с нее и надо MYSQL собрать
« Последнее редактирование: 08 Апреля 2016, 13:44:44 от lead »
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #31 : 08 Апреля 2016, 14:32:12 »
Насколько я понимаю, нас интересуют данные около строк 139-144:
Код: (html5) [Выделить]
                                                                <div class="form-user-name"><noindex><a rel="nofollow" href=""><span>Совет ЕКС</span></a></noindex></div>
                                                                <div class="form-user-register-avatar"><noindex><a rel="nofollow" href="" title="Профиль автора сообщения"><span><!-- ie --></span></a></noindex></div>
                                                                <div class="form-user-status form-user-administrator-status"><span>Администратор</span></div>
                                                                <div class="form-user-additional">
                                                                        <span></span>
                                                                        <span>Баллов: <span>97</span></span>
192-197:
Код: (html5) [Выделить]
                                                                <div class="form-user-name"><noindex><a rel="nofollow" href=""><span>Совет ЕКС</span></a></noindex></div>
                                                                <div class="form-user-register-avatar"><noindex><a rel="nofollow" href="" title="Профиль автора сообщения"><span><!-- ie --></span></a></noindex></div>
                                                                <div class="form-user-status form-user-administrator-status"><span>Администратор</span></div>
                                                                <div class="form-user-additional">
                                                                        <span>Сообщений: <span><noindex><a rel="nofollow" href="">197</a></noindex></span></span>
                                                                        <span>Баллов: <span>97</span></span>
247-252:
Код: (html5) [Выделить]
                                                                <div class="form-user-name"><noindex><a rel="nofollow" href=""><span>Арт</span></a></noindex></div>
                                                                <div class="form-user-avatar"><noindex><a rel="nofollow" href="" title="Профиль автора сообщения"><img src="" border="0" alt="" width="51" height="51" /></a></noindex></div>
                                                                <div class="form-user-status "><span>Администратор</span></div>
                                                                <div class="form-user-additional">
                                                                        <span></span>
                                                                        <span>Баллов: <span>56</span></span>

По  <div class="form-user-name">  находим имена:  Совет ЕКССовет ЕКС  (еще раз),  Арт
После каждого имени чуть ниже в окружении spanов - баллы.

Не пойму только, где здесь  <div class="заголовок">

Я правильно всё понимаю?

И не заметил сразу, там еще строки 300-305 — опять  Совет ЕКС
« Последнее редактирование: 08 Апреля 2016, 14:46:53 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #32 : 08 Апреля 2016, 14:50:35 »
inkblack, абсолютно верно, но есть уточнение - вчерашние баллы и эти "баллы" это разные баллы :) те были в тексте сообщения, соответственно нам нужен текст сообщения, эти баллы, также как и время регистрации и тд - не нужны, ценности они не несут.

Номера строк не скажу, опять с телефона сижу, вобщем:
Заголовок, он же "заголовок" - <div class="form-header-title">
Кто сделал запись, он же "Петя Петров" - <div class="form-user-name"> (тот самый Совет ЕКС)
Тело письма, оно же "99 баллов" - <div class="form-post-text" id="message_text_15669"> (вот они наши случайные id вылезли)
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #33 : 08 Апреля 2016, 14:57:00 »
Слава богу, хоть классы латиницей названы, а то я уж боялся, что в кодировках может быть проблема.
Короче, я сейчас обедаю минут 30, потом еще одно дело минут на 5, а потом полчаса — и ваша прога готова.


Пользователь добавил сообщение 08 Апреля 2016, 17:07:47:
Вот, готово:
Код: (PHP) [Выделить]
#!/usr/bin/rexx
                                                                             /*
  Всё это будет работать, бла-бла-бла и т.д., потом напишу подробный коммент */

main:

 FILE  = 'sosorce.html'
 Ten6  = 1e6

 LF    = d2c(10)
 CRLF  = d2c(13) || LF
 EMP   = ''

 RAN   = '>'

 ANCH0 = '<a rel="nofollow" href="">'
 ANCH1 = '</a>'
 NOIN0 = '<noindex>'
 NOIN1 = '</noindex>'
 SPA_0 = '<span>'
 SPA_1 = '</span>'

 DIV_0 = '<div '
 DIV_1 = '</div>'

 HDR   = 'class="form-header-title"'
 USR   = 'class="form-user-name"'
 MSG   = 'class="form-post-text"'

 TAB = d2c(9)                            -- символ с кодом 9, т.е. табуляция

 DUMMY = parsefile(FILE)

exit 0;

parsefile:
 parse arg FNAME

 DATA = charin(FNAME,, Ten6)

 A_HDR = parsedata(HDR)
 if A_HDR = EMP then return 1

 do forever
  A_USR = parsedata(USR)
  if A_USR = EMP then leave
  A_MSG = parsedata(MSG)
  say A_HDR || TAB || A_USR || TAB || A_MSG
 end

return 0;

parsedata:
 parse arg CLASS

 do while DATA \= EMP
  parse var DATA . (DIV_0) CONTENT (DIV_1) DATA
  if pos(CLASS, CONTENT) > 0 then do

   parse var CONTENT . (CLASS) CONTENT
   parse var CONTENT . (RAN)   CONTENT
   CONTENT = changestr(NOIN0, CONTENT, EMP)
   CONTENT = changestr(NOIN1, CONTENT, EMP)
   CONTENT = changestr(ANCH0, CONTENT, EMP)
   CONTENT = changestr(ANCH1, CONTENT, EMP)
   CONTENT = changestr(SPA_0, CONTENT, EMP)
   CONTENT = changestr(SPA_1, CONTENT, EMP)
   CONTENT = changestr(CRLF,  CONTENT, EMP)
   CONTENT = changestr(LF,    CONTENT, EMP)
   return CONTENT
  end
 end

 return EMP;

Пробный файл обрабатывает, вот результат:

Кодекс поведения игрока ITF и ТЕ           Совет ЕКС   Здесь ЕКС планирует отвечать на вопросы по Кодексу поведения ученика. Хотя это не совсем епархия ЕКС, но на территории России проводится достаточно много международных турниров, которые обслуживают российские судьи в различных судейских должностях. В настоящее время между Кодексом поведения игрока РFA и кодексами международных организаций есть некоторые отличия, которые пытаются свести к минимуму. Такая работа продолжается.
Кодекс поведения игрока ITF и ТЕ           Совет ЕКС   Для удобства пользователей Совет ЕКС размещает действующий Кодекс поведения игрока 2006 года.
Кодекс поведения игрока ITF и ТЕ           Арт   Ещё бы и форму 13 подправить (с единым образцом заполнения)
Кодекс поведения игрока ITF и ТЕ           Совет ЕКС   <B>Арт,</B>  это функция НП "РТТ", которую они никак не хотят передать в ЕКС. Обратитесь в ОУ ТРТТ.
« Последнее редактирование: 08 Апреля 2016, 17:13:56 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #34 : 08 Апреля 2016, 17:52:03 »
inkblack, просто не знаю как благодарить!  :D

Я, к сожалению, опять на выезде и опять тот же ноутбук коллеги с виндой  :)

Но уже по выводу видно, что это оно, даже если и подправить что - там разберусь, главное картина в целом ясна! Часам к 22 буду дома - сразу запущу и отпишусь
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #35 : 08 Апреля 2016, 19:28:41 »
Да, конечно, только есть нюанс: оно не работает.
Делюсь знаниями, но их у меня мало!

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #36 : 08 Апреля 2016, 22:01:12 »
На этой странице в 30 сообщении приведен файл. ну и покажите, что ваши однострочники выдают.
Моя прога из 75 строк выдает результат, можете посмотреть в сообщении 33.
Делюсь знаниями, но их у меня мало!

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #37 : 08 Апреля 2016, 22:29:24 »
Надо было получить:

1 июня 2005
далее код, в нем помимо прочего
<span>
Ваня Иванов</span>
99 баллов
1 июня 2005
далее еще код, в нем ниже
<span>
Петя Петров</span>
87 баллов


Зачеркнуто то, чего не должно быть в выводе. Красным — то, что должно быть, а у вас нет.
И пример надо было брать не про Ваню и Петю, а из 30 ответа — это немного разные вещи.

Дело в том, что я задачу решил, а вы сказали: «Там всё просто и элементарно», а решения от вас — нет.
Никто вас не заставляет решать, но не надо тогда и говорить, что всё просто.
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #38 : 08 Апреля 2016, 22:36:00 »
inkblack, ура! Все сработало идеально! Вытащил не глядя 10 разных файлов - отработал все, причем моментально!

Правда и без маленького бага не обошлось  :) Он вместо запятой делает табуляцию, и если делать stdout не в текст, а в csv - получается, что вместо 3 столбцов в файле будет 20-30, разбив предложение на разные столбцы. Да и черт с ним, уже придумал решение на коленке - в текстовом документе заменю "   " на " | " и вуаля!

И проверьте личку, я там Вас отблагодарить хотел бы  ;)
пришло время переустановить шындос

Оффлайн cargan

  • Активист
  • *
  • Сообщений: 488
  • Oderint, dum metuant
    • Просмотр профиля
Re: экспорт из html
« Ответ #39 : 08 Апреля 2016, 22:37:33 »
inkblack,
вы просто изобретаете очередной велосипед еще раз
** смотрите в  PHP -секцию- SimpleXML
-- все изобретено до вас и причем очень давно
!! более того это форум Ubuntu, а не  PHP!!
« Последнее редактирование: 08 Апреля 2016, 22:41:39 от cargan »

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #40 : 08 Апреля 2016, 22:38:44 »
cargan, спасибо за совет, ссылку курю, на будущее пригодится.

Форум не PHP, но изначально искалось готовое решение на Ubuntu  :)
пришло время переустановить шындос

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #41 : 08 Апреля 2016, 22:59:59 »
inkblack, ура! Все сработало идеально! Вытащил не глядя 10 разных файлов - отработал все, причем моментально!

Правда и без маленького бага не обошлось  :) Он вместо запятой делает табуляцию...

Ну я вообще-то и делал, чтобы поля были разделены табуляцией.
Потом можно затащить это дело в LibreOffice — получится сразу таблица.

Кстати, там надо добавить еще одну обработку, заменить Табы на пробелы.
Вы же не можете быть уверены, что внутри форумных постов Табов нет?
для этого добавляем строку 70:
Код: (php) [Выделить]
   CONTENT = changestr(TAB,   CONTENT, ' ')
А в csv экспортировать несколько сложнее...
Делюсь знаниями, но их у меня мало!

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: экспорт из html
« Ответ #42 : 09 Апреля 2016, 12:04:15 »
Код: (bash) [Выделить]
sed -n '
    /<div class="form-header-title">/{
        :1
        /<\/div>/!{
            N
            b1
        }
        s/.*\(span>\)[[:space:]]\?\(.\+\b\)\s*<\/\1.*/\2/
        s/.*">\(.*\b\)\s*<\/div>/\1/
        h
    }
    /<div class="form-user-name">/{
        :2
        /<\/div>/!{
            N
            b2
        }
        s/.*\(span>\)\(.\+\b\)\s*<\/\1.*/\2/
        s/.*">\(.*\b\)\s*<\/div>/\1/
        H
    }
    /<div class="form-post-text[^>]*">/{
        :3
        /<\/div>/!{
            N
            b3
        }
        s/.*\(span>\)\(.\+\)\s*<\/\1.*/\2/
        s/.*">\(.*\)\s*<\/div>/\1/
        H
        g
        s/\n/;/
        s/\n/;/p
        s/;.*//
        h
    }
' *.html
Только по поводу id|баллы не уловил откуда брать. И конечно, хотя это и «однострочник» (длинный правда :) ), если использовать специализированный инструмент, то все намного проще потому как самое емкое здесь — «выдрать» текст из тэгов, что в чём-то наподобие lxml делается слёту.


Пользователь добавил сообщение 09 Апреля 2016, 12:22:49:
Хотя GNU bash позволяет слегка подсократить повторяющиеся функции
Код: (bash) [Выделить]
regtxt='[[:space:]]*\(.\+\b[[:punct:]]\?\)[[:space:]]*'
rmtag='/<\/div>/!{N;b1};s/.*\(span>\)'$regtxt'<\/\1.*/\2/;s/.*">'$regtxt'<\/div>/\1/'
sed -n '
    /<div class="form-header-title">/{:1;'$rmtag';h;}
    /<div class="form-user-name">/{:2;'${rmtag/b1/b2}';H;}
    /<div class="form-post-text[^>]*">/{:3;'${rmtag/b1/b3}';H;g;s/\n/;/;s/\n/;/p;s/;.*//;h;}
' *.html
« Последнее редактирование: 09 Апреля 2016, 12:38:03 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: экспорт из html
« Ответ #43 : 09 Апреля 2016, 13:17:18 »
Цитировать
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Ну отлично, никто и не сомневался, что  sed для таких вещей можно применить.
Просто я взял тот инструмент, которым пользоваться умею. Имхо, тоже получилось понятно, и не слишком длинно, и не слишком долго.

И мы по-разному немного сделали вот что:
у меня будет работать не только с  <div class="form-user-name">,
но и с  <div group="Adm" A="b" C="d" class="form-user-name" E="f" G="h">

Я писал пояснение к своей проге, но не дописал еще. Там сказано, когда она будет всё правильно парсить, а когда не будет.

Ну и вашу прогу можно изменить соответственно:
Код: (bash) [Выделить]
sed -n '
   /class="form-header-title[^>]*">/{
   и т. д.
   и всё такое

И у меня кое-что подсократить.
« Последнее редактирование: 09 Апреля 2016, 13:18:58 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн lead

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Re: экспорт из html
« Ответ #44 : 09 Апреля 2016, 14:16:42 »
Azure, не совсем понял по поводу sed. Это ж текстовый редактор, если мне память не изменяет? Я что-то слышал о sed-скриптах, но вживую не видел.

Эту конструкцию в пустой файл ввести, а затем командной строкой открыть? Или все целиком в терминал?  :coolsmiley:



Появилась догадка - через sh? Ну по-крайней мере это логично )
« Последнее редактирование: 09 Апреля 2016, 14:21:45 от lead »
пришло время переустановить шындос

 

Страница сгенерирована за 0.061 секунд. Запросов: 25.