Форум: "Начинающим";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
ВнизПарсинг HTML Найти похожие ветки
← →
Alex_C (2009-05-21 19:06) [0]Столкнулся с весьма специфичной задачью:
есть в инете HTML страничка. Надо ее скачать и пропарсить. Парситься она очень просто - каждый столбец у нее имеет свою позицию и длинну.
Проблема выяснилась в том, что данные в эту табличку могут вноситься с использованием национальных символов. В частности венгерская буква "o с двуми черточками сверху" при приеме интерпритируется в 2 символа - Е" - в результате чего столбцы сдвигаются, и парсить становиться невозможно. Кто нибудь знает, как с этим бороться?
← →
clickmaker © (2009-05-21 19:25) [1]> венгерская буква "o с двуми черточками сверху" при приеме
> интерпритируется в 2 символа
кодировка - unicode или utf-8?
← →
Alex_C (2009-05-21 21:33) [2]В заголовке стоит content="text/html;charset=utf-8".
← →
sniknik © (2009-05-21 22:23) [3]тогда 2 символа на показ одного это мелочи, может быть до семи.
а чего это невозможно парсить? разве нельзя алгоритм не зависящий от позиций придумать.
← →
Alex_C (2009-05-21 22:40) [4]
> тогда 2 символа на показ одного это мелочи, может быть до
> семи.
> а чего это невозможно парсить? разве нельзя алгоритм не
> зависящий от позиций придумать.
В том то и дело, что нельзя. В колонках может размещаться любой текст с пробелами, знаками препинания и т.д. Разделение - только жестко привязанные границы. И если оно сбивается - пропарсить уже невозможно.
Сейчас пробую ф-цию UTF8ToAnsi...
← →
KilkennyCat © (2009-05-22 00:37) [5]
> Сейчас пробую ф-цию UTF8ToAnsi...
Зачем?
← →
brother © (2009-05-22 05:34) [6]> Зачем?
видимо, чтобы избавиться от:
> В частности венгерская буква "o с двуми черточками сверху"
> при приеме интерпритируется в 2 символа - Е"
← →
brother © (2009-05-22 10:26) [7]> и парсить становиться невозможно.
а парсить по тэгам?
← →
Alex_C (2009-05-22 23:01) [8]
> а парсить по тэгам?
:) Народ, типа не совсем тупой.
Нет там тегов. Текст просто разбитый ПРОБЕЛАМИ по столбцам. Это динамически формируемая таблица - отчет по приходящим данным.
← →
sniknik © (2009-05-22 23:17) [9]> Нет там тегов.
тогда это не HTML.
← →
KilkennyCat © (2009-05-23 00:29) [10]и что, нельзя попросить, чтоб вставили непечатаемый символ?
но собствеенно, я все равно не понимаю проблемы. и не понимаю, зачем какие-то функции.
Имеем последовательность байт:
12 23 45 67 89 01 56 87
если это уникод - тут 4 символа. если нет - 8.
нам надо пропарсить, зная, что следующая колонка с определенной позиции? Ну и какие трудности? Парсим легко и просто. И главное - быстро. А потом уже мучаем с отображением в тексте, конвертируя в нужную кодировку и т.д.
← →
sniknik © (2009-05-23 01:00) [11]> если это уникод - тут 4 символа. если нет - 8.
а если это UTF8 то тут от 2х до 8и символов... смотря что за символы.
> Ну и какие трудности?
а вот это действительно непонятно, т.к. нет конкретики, а "в общем" можно бесконечно одно и тоже мусолить.
т.е. проблемы может и есть но в чем они неясно.
← →
KilkennyCat © (2009-05-23 02:51) [12]
> а если это UTF8
Возможно. Но без разницы, ибо вряд ди парсируемый документ то в одной, то в другой кодировке. И если утф - бежим по байтам как утф.
> проблемы может и есть но в чем они неясно.
в человеческом факторе, разумеется.
Ну и в Касперском.
← →
Alex_C (2009-05-23 22:59) [13]
> тогда это не HTML.
Открою большой секрет - это ХТМЛ ))) Это обычная ХТМЛ страничка, куда между тегами <br> вставлен обычный кусок текста.
> и что, нельзя попросить, чтоб вставили непечатаемый символ?
Понимаешь, есть "небольшая" проблема - эта страничка Международного Союза электросвязи, со штаб-квартирой в Нью-Йорке... Боюсь они меня не послушают )))
> но собствеенно, я все равно не понимаю проблемы. и не понимаю,
> зачем какие-то функции.
> Имеем последовательность байт:
> 12 23 45 67 89 01 56 87
> если это уникод - тут 4 символа. если нет - 8.
Ребят, вы все меня не поняли! НЕТ ТАМ НИКАКИХ 4 байт! Все символы - по 1 байту, и текст - как бы совершенно обычный текст! Но! Вот я смотрю страничку с этим текстом у них на сайте - вижу символ национальный. Скачиваю страничку при помощи InternetReadFile - все скачивается как обычнае символы, по 1 байту, а вот некоторые национальные символы приходят как 2 байта - вот в чем проблема! Т.е. предсказать, когда прийдет такой символ - невозможно. А самое главное не понимаю, почему IE его отображает нормально, а приходит он как 2 байта.
← →
sniknik © (2009-05-23 23:08) [14]> Ребят, вы все меня не поняли!
все тебя поняли, а вот ты не желаешь понять...
> Т.е. предсказать, когда прийдет такой символ - невозможно.
а не надо предугадывать, надо работать в той кодировке в которой представлен текст, по ее "правилам".
> А самое главное не понимаю, почему IE его отображает нормально, а приходит он как 2 байта.
это потому, что ответов не читаешь... а курс лекций на тему, что же такое utf-8 тебе тут читать не собираются.
← →
KilkennyCat © (2009-05-23 23:09) [15]
> Понимаешь, есть "небольшая" проблема - эта страничка Международного
> Союза электросвязи
Ну, да, тогда просить нельзя. А то отругают, или даже побьют.
> Все символы - по 1 байту
> вот некоторые национальные символы приходят как 2 байта
бред какой-то...
может, имеет смысл все-таки сначала пропарсить, а потом отображать? а не пытаться обработать уже обработанное в соответствии каким-то кодировкам...
> вы все меня не поняли!
Тебя прекрасно поняли. Ты сам пойми, где, когда и что делать.
← →
sniknik © (2009-05-23 23:13) [16]>> вот некоторые национальные символы приходят как 2 байта
> бред какой-то...
тебе тоже не помешает почитать про различные кодировки.
← →
Игорь Шевченко © (2009-05-23 23:25) [17]sniknik © (23.05.09 23:13) [16]
За ради интереса можешь попробовать поэкспериментировать - найди страницу с большим кусом венгерского текста и повставляй его в неюникодные программы с разной кодовой страницей - узнаешь много нового, в частности, про то, что часть венгерских символов преобразуется в пары.
← →
Игорь Шевченко © (2009-05-23 23:28) [18]Автор, а ты попробуй сразу юникод читать, в смысле функции с W на конце использовать
← →
sniknik © (2009-05-24 00:20) [19]> За ради интереса можешь попробовать поэкспериментировать
зачем мне экспериментировать если я это знаю? а тебе бы научится получше читать...
p.s. Я в ответе за свои слова, а не за то, что вы подумали. (© не помню чей)
> а ты попробуй сразу юникод читать
если сразу читать в юникод то получится бред, utf-8 это ни разу не юникод.
вот преобразовать, и после работать с юникодом, это да, может получится проще.
← →
Игорь Шевченко © (2009-05-24 00:40) [20]sniknik © (24.05.09 00:20) [19]
> а тебе бы научится получше читать...
взаимно.
Я имел в виду, что буква ő может вставиться в неюникодную программу как o", а буква ű - как u". По меньшей мере я наблюдал такой эффект через буфер обмена.
← →
KilkennyCat © (2009-05-24 00:50) [21]а я имел ввиду, что пофиг как кто что чем где и когда отображает. Тянем файл. Такой, какой он есть на сервере. Обращаемся к нему как к набору байт. И парсим самостоятельно. И пофиг, юникод или нет. 1 байт или 2. У нас есть жесткие правила, и только ими руководствоваться должно.
Распарсили - вот тогда уже отображаем, как угодно, чем угодно, где угодно и в чем угодно.
А анализировать, как оно все выглядит в каком-то браузере или блокноте или в чем-нить еще, и на основании этого пытаться сообразить парсинг - это бред.
← →
Германн © (2009-05-24 00:55) [22]АП на вас троих не хватает!
:)
← →
sniknik © (2009-05-24 12:19) [23]> а я имел ввиду, что пофиг как кто что чем где и когда отображает.
вот именно это и показывает, что ты не понимаешь то, что тут описывают как проблему.
> Тянем файл. Такой, какой он есть на сервере. Обращаемся к нему как к набору байт.
и видим, что "таблица" ровно отображающаяся в браузере "кривая" в строках таких каких она есть на сервере.
> И пофиг, юникод или нет. 1 байт или 2.
сколько раз повторить что utf-8 это не юникод? нет там ровно 1-го или 2-х байт на символ. там от 1 до 7 на символ, в произвольном порядке в зависимости от того, что за символ, какого языка.
> Распарсили - вот тогда уже отображаем
как? в этом то у него и вопрос. работать в исходной кодировке он не хочет/не может/не знает как/и т.д., хочет попроще, от того что видит в браузере (и не хочет знать как сам браузер это составил).
алгоритма не зависящего от позиций говорит нет (см. c [3]), а позиционный... то что в браузере начинается с 15 символа например в исходных может начинаться с 20го или 25го, в зависимости от данных в столбце.
> это бред.
еще раз настоятельно рекомендую почитать про кодировки, прежде чем высказываться здесь и обзывать бредом все, что сам не понимаешь.
← →
KilkennyCat © (2009-05-24 13:36) [24]Я знаю, что такое utf-8.
← →
Alex_C (2009-05-24 20:08) [25]
> Игорь Шевченко © (24.05.09 00:40) [20]
> sniknik © (24.05.09 00:20) [19]
>
>
> > а тебе бы научится получше читать...
>
>
> взаимно.
>
> Я имел в виду, что буква ő может вставиться в неюникодную
> программу как o", а буква ű - как u". По меньшей мере я
> наблюдал такой эффект через буфер обмена.
В общем как обычно - куча тупых советов, но все же один человек нашелся, который все объяснил!
То Игорь Шевченко: Вот! Совершенно верно! Никакой utf-8 тут не причем. Совершенно верно - "что буква ő может вставиться в неюникодную программу как o", а буква ű - как u". "
← →
KilkennyCat © (2009-05-24 22:04) [26]В общем, как обычно - задающий нифига не может объяснить толком, что у него за проблема, обзывает всех тупыми, и у одного оказался телепатор.
← →
sniknik © (2009-05-24 22:24) [27]> [0] Надо ее скачать и пропарсить.
где в словах скачать и пропарсить есть слова "копируется через буфер обмена"?
(эффект неявного преобразования при копировании через буфер это именно то про, что говорил Игорь Шевченко)
понимаю теперь откуда взялся html который "не html" и таблица без табличных тегов... автор оказывается исходный код html странички получает копируя отображаемое браузером через буфер обмена.
← →
KilkennyCat © (2009-05-24 23:03) [28]
> sniknik © (24.05.09 22:24) [27]
Именно об этом я и говорил, что парсить надо сразу. А когда уже преобразовано хрен знает где и чем - можно только гадать.
← →
brother © (2009-05-25 04:11) [29]не хочу буквоедничать, но как согласуется
> Нет там тегов. Текст просто разбитый ПРОБЕЛАМИ по столбцам.
с
> В заголовке стоит content="text/html;charset=utf-8".
> куда между тегами <br> вставлен обычный кусок текста.
что фигней страдаешь? Штирлиц?
показывай код твоего HTML.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.07.19;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.005 c