我的应用程序获取一个包含大量链接的大型 html 格式文件作为其数据的一部分。就像您在 Google 或 Yahoo 或其他搜索引擎上搜索任何内容时会得到的内容一样:URL 列表以及说明或其他文本。
我一直在尝试提供一个可以解析 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
被更新为超出了解析的数据(它是一个输入输出参数)并且传入的字符串被修改了。我感觉很懒/太忙,无法使用内存分配的返回字符串来完成完整的解决方案。
此外,您可能应该在紧密范围大括号(第一个除外)的级联上返回错误,这也是我将它们堆叠起来的部分原因。还有其他更简洁的解决方案可以调整为更通用。
所以基本上你会重复调用该函数,直到它返回 false。
关于c - 在C中从HTML <a></a>标签中解析URL的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4336874/