Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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]


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


взаимно.

Я имел в виду, что буква &#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.005 c
2-1243330944
fs
2009-05-26 13:42
2009.07.19
access violation при закрытии приложения (DLL)


2-1243149942
fedor12345
2009-05-24 11:25
2009.07.19
Как реализовать вставку строку в StringGrid перед другой строкой


2-1243271257
Надеждочка
2009-05-25 21:07
2009.07.19
чтение из файла заданной строки


2-1243354204
ondesly
2009-05-26 20:10
2009.07.19
Canvas.CopyRect


15-1242478890
ПЛОВ
2009-05-16 17:01
2009.07.19
Удаленное управление Линуксом из Винды. Чем?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский