Разбор веб-страницы без разорванных строк - PullRequest
0 голосов
/ 13 апреля 2009

Я пытаюсь разобрать некоторые строки с веб-страницы, но получаю строки, которые могут быть разбиты, и нет способа проверить, завершена ли строка или нет. На данный момент у меня есть буфер в 1024 байта, с которым я получаю части страницы. Что я должен сделать, чтобы убедиться, что получаю полную строку, желательно без слишком большого буфера.

Ответы [ 3 ]

0 голосов
/ 13 апреля 2009

Я думаю, что вы пытаетесь сказать, что ваша строка не всегда попадает в одну и ту же итерацию вашего буфера. Если это так, то в основном есть два варианта.

  1. Используйте ОГРОМНЫЕ буферы. Невозможно доказать, что вы не получите здесь промахов, но это значительно снизит вероятность.
  2. Если вы знаете максимальную длину искомой строки, вы можете создать два буфера. Первая содержит текущую часть, которую вы только что получили, а вторая содержит предыдущую. Причина, по которой вам нужно знать длину строки, заключается в том, что размер ваших буферов должен быть как минимум меньше размера строки.

Второе решение намного лучше, но оно основано на знании максимальной длины строк.

0 голосов
/ 30 апреля 2009

Это только косвенно связано с вашим вопросом, но вы можете решить не ту проблему. В течение многих лет я вычеркивал HTML с веб-страниц, пытаясь найти определенные строки. Затем, услышав о расширении Chickenfoot для Firefox, я понял, что будет гораздо проще использовать браузер w3m для преобразования HTML в ASCII, а затем очистить ASCII с помощью стандартного механизм типа LPEG или парсинг комбинаторов . Эта идея не работает для каждой проблемы, но когда это происходит, это обычно намного, намного проще, чем очистка HTML.

Например, недавно я использовал эту технику, чтобы очистить тексты более 200 000 песен для выполнения домашнего задания.

0 голосов
/ 13 апреля 2009

Я не совсем уверен, что понимаю, что вы делаете и что вы подразумеваете под «ломаной струной», но я постараюсь дать вам ответ.

Под ломанной строкой я предполагаю, что вы имеете в виду логическое окончание фрагмента HTML или текста. В конечном счете, у вас нет никакого способа, кроме как анализировать, и, если вы не в какой-то логической точке остановки, продолжайте читать. Если вы используете char [] для хранения данных, у вас наверняка будут проблемы с буфером. В зависимости от того, как вы читаете данные, метод может измениться, но процесс примерно такой:

(вроде C, технически неточно)

int allocLen = 1024;
char buffer[] = malloc(allocLen);
readInNBytes(buffer, 128);
if (notAtLogicalEnd(buffer))
     realloc(buffer, allocLen *= 2);
else
     // we're done?

Теперь, очевидно, это упускает детали определения, не сломана ли ваша строка, но это все еще в воздухе для интерпретации. Есть несколько способов проверить правильность конца данных: найти пробелы, разрывы строк и т. Д. Или проверить, заканчивается ли HTML тегом [/ html]. В любом случае, вы должны прочитать весь набор данных.

Мне было бы любопытно узнать, как вы читаете данные HTML и ваше полное объяснение «разбитой строки», и я пересмотрю свой ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...