c - 在C中从HTML <a></a>标签中解析URL的信息

标签 c parsing text

我的应用程序获取一个包含大量链接的大型 html 格式文件作为其数据的一部分。就像您在 Google 或 Yahoo 或其他搜索引擎上搜索任何内容时会得到的内容一样:URL 列表以及说明或其他文本。

我一直在尝试提供一个可以解析 URL 和描述并将它们保存到文本文件中的函数,但事实证明这很困难,至少对我来说是这样。所以,如果我有:

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

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

有什么办法可以实现这个目标吗?用普通的 C 语言?
如有任何帮助,我们将不胜感激。

最佳答案

你确实需要一个合适的 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。

关于c - 在C中从HTML <a></a>标签中解析URL的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4336874/

相关文章:

python - 如果 `*(block **)p` 的类型为 `block`,为什么 `p` 与 `block*` 不同? [CPython 源代码]

parsing - 使用 Haskell/Parsec 转换\"into "

r - 如何检查PDF是否是扫描图像或包含R中的文本

excel - 使用 Talend 将文本文件转换为 Excel

css - 移动版在同一行显示文本和图标

客户端服务器循环导致管道损坏 - C

code jam练习--阅读题

javascript - Java Jsoup : Extract all the text

PHP解析YAML,存储在DB中以便于修改值,然后返回原始结构

c++ - 不用递归实现 Minimax