从C中的HTML <a></a>标记中解析URL的信息

时间:2010-12-02 15:50:57

标签: c parsing text

我的应用程序将一个包含大量链接的大型html格式文件作为其数据的一部分。如果您在Google或Yahoo或其他搜索引擎上搜索任何内容,您会得到的结果:URL列表和说明或其他文本。

我一直试图推出一个可以解析URL和描述并将它们保存到文本文件中的函数,但事实证明这很难,至少对我而言。所以,如果我有:

<a href="http://www.w3schools.com">Visit W3Schools</a>

我会解析http://www.w3schools.comVisit W3Schools并将其保存在文件中。

有任何方法可以实现这一目标吗?在普通的C?
任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

你真的需要一个合适的html解析器,但对于快速和肮脏的东西,请尝试:

bool get_url(char **data, char **url, char **desc)
{
  bool result = false;
  char *ptr = strstr(*data, "<a");

  if(NULL != ptr)
  {
    *data = ptr + 2;

    ptr = strstr(*data, "href=\"");
    if(NULL != ptr)
    {
      *data = ptr + 6;
      *url = *data;

      ptr = strchr(*data, '"');
      if(NULL != ptr)
      {
        *ptr = '\0';
        *data = ptr + 1;

        ptr = strchr(*data, '>');
        if(NULL != ptr)
        {
          *data = ptr + 1;
          *desc = *data;

          ptr = strstr(*data, "</a>");
          if(NULL != ptr)
          {
            *ptr = '\0';
            *data = ptr + 4;
            result = true;
          }
        }
      }
    }
  }

  return result;
}

不是data被更新为超出解析的数据(它是一个输入输出参数)并且传入的字符串被修改。我感到很懒/太忙,不能用内存分配的返回字符串做完整的解决方案。

此外,您可能应该在近距离范围括号(第一个除外)的级联上返回错误,这也是我将它们堆叠起来的部分原因。还有其他更整洁的解决方案可以适应更通用。

所以基本上你然后重复调用该函数,直到它返回false。