解析网页没有破碎的字符串

时间:2009-04-13 01:15:49

标签: html c parsing

我正在尝试从网页中解析一些字符串,但我不断收到碰巧分解的字符串,无法检查字符串是否完整。目前,我有一个1024字节的缓冲区,我正在接收部分页面。我该怎么做才能确保我得到完整的字符串,最好没有过大的缓冲区。

3 个答案:

答案 0 :(得分:0)

我不完全确定我明白你在做什么,你的意思是“断弦”,但我会试着给你一个答案。

通过破碎的字符串,我假设你的意思是一段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数据的,以及你对'断弦'的完整解释,然而,我会修改我的答案。

答案 1 :(得分:0)

我认为你要说的是你的字符串并不总是在缓冲区的同一次迭代中结束。如果是这样,基本上有两种选择。

  1. 使用HUGE缓冲区。没有办法证明你不会在这里得到任何失误,但它会显着降低机会。
  2. 如果您知道要查找的字符串的最大长度,则可以创建两个缓冲区。第一个包含你刚刚获得的当前部分,另一个包含前一部分。你需要知道字符串长度的原因是因为缓冲区的大小必须至少是字符串的大小。
  3. 第二种解决方案是迄今为止更好的解决方案,但它依赖于对字符串最大长度的了解。

答案 2 :(得分:0)

这与您的问题只是切线相关,但您可能正在解决错误的问题。多年来,我常常从网页中删除HTML以尝试获取某些字符串。然后在听说Firefox的Chickenfoot扩展后,我意识到使用w3m Web浏览器将HTML转换为ASCII然后使用像{{3}这样的标准机制来刮取ASCII会容易得多。 }或LPEG。这个想法并不适用于所有问题,但是当它出现时通常比抓取HTML要容易得多。

例如,我最近使用这种技术为20多首歌曲收集歌词,以便完成家庭作业。