问题描述:
我的应用程序获取包含大量链接的大型html格式文件作为其数据的一部分。就像在Google或Yahoo或其他搜索引擎上搜索任何内容时所获得的结果一样:URL列表和描述或其他文本。解析HTML中的一个URL的信息<a></a>在C中的标签
我一直在尝试推出一个函数,它可以解析URL和描述并将它们保存到文本文件中,但事实证明很难,至少对我而言。所以,如果我有:
<a href="http://www.w3schools.com">Visit W3Schools</a>
我会解析http://www.w3schools.com
和Visit 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
得到更新,以超出解析的数据(这是一个在-out参数),而传入的字符串会被修改。我感到很懒/太忙,无法用内存分配的返回字符串做完整的解决方案。
另外,你可能应该返回关闭范围括号(除了第一个)的层叠上的错误,这也是为什么我把它们堆叠起来的原因之一。还有其他整洁的解决方案可以适应更通用。
因此,基本上你然后重复调用该函数,直到它返回false。
如果HTML确实只是`...`,那么你可以使用XSL。否则,您将需要一个完整的HTML解析器。也许甚至是一个shell脚本+ ** Lynx **(一个基于文本的浏览器)+ ** awk **。如果这是一次性任务,那么我会在编辑器中进行搜索/替换。 (再次假设格式良好的XHTML。) – 2010-12-02 15:54:25
这只是一个简单的html文件。 就是这样。现在,我不想使用库或外部html解析器。我只想读取该文件并解析出网址和描述。 – Jessica 2010-12-02 16:01:57