解析HTML中的一个URL的信息在C中的标签

问题描述:

我的应用程序获取包含大量链接的大型html格式文件作为其数据的一部分。就像在Google或Yahoo或其他搜索引擎上搜索任何内容时所获得的结果一样:URL列表和描述或其他文本。解析HTML中的一个URL的信息<a></a>在C中的标签

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

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

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

任何方式来实现这一目标?在纯C?
任何帮助表示赞赏。

+0

如果HTML确实只是`...`,那么你可以使用XSL。否则,您将需要一个完整的HTML解析器。也许甚至是一个shell脚本+ ** Lynx **(一个基于文本的浏览器)+ ** awk **。如果这是一次性任务,那么我会在编辑器中进行搜索/替换。 (再次假设格式良好的XHTML。) – 2010-12-02 15:54:25

+0

这只是一个简单的html文件。 就是这样。现在,我不想使用库或外部html解析器。我只想读取该文件并解析出网址和描述。 – Jessica 2010-12-02 16:01:57

你真的需要一个适当的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得到更新,以超出解析的数据(这是一个在-out参数),而传入的字符串会被修改。我感到很懒/太忙,无法用内存分配的返回字符串做完整的解决方案。

另外,你可能应该返回关闭范围括号(除了第一个)的层叠上的错误,这也是为什么我把它们堆叠起来的原因之一。还有其他整洁的解决方案可以适应更通用。

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