Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.19;
Скачать: CL | DM;

Вниз

Парсинг 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]


> а тебе бы научится получше читать...


взаимно.

Я имел в виду, что буква &#337; может вставиться в неюникодную программу как o", а буква &#369; - как 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]
>
>
> > а тебе бы научится получше читать...
>
>
> взаимно.
>
> Я имел в виду, что буква &#337; может вставиться в неюникодную
> программу как o", а буква &#369; - как u". По меньшей мере я
> наблюдал такой эффект через буфер обмена.


В общем как обычно - куча тупых советов, но все же один человек нашелся, который все объяснил!
То Игорь Шевченко: Вот! Совершенно верно! Никакой utf-8 тут не причем. Совершенно верно - "что буква &#337; может вставиться в неюникодную программу как o", а буква &#369; - как 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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.013 c
15-1242749520
pashkachelovek
2009-05-19 20:12
2009.07.19
Подскажите программу


11-1203694121
Алексей К.
2008-02-22 18:28
2009.07.19
Не удаётся получить объект Sender в обработчике...


6-1204872317
prodex
2008-03-07 09:45
2009.07.19
Асинхронные сокеты


15-1242275651
TheEd
2009-05-14 08:34
2009.07.19
Бла, бла, что за фигня - TPageControl не отрабатывает OnChange!


15-1242503724
TRSteep
2009-05-16 23:55
2009.07.19
ОКВЭД регистрация ИП