【发布时间】:2020-04-10 15:37:22
【问题描述】:
如何使用 C 标准库提取 HTML 中的所有 URL?
我正在尝试使用 sscanf() 处理它,但是 valgrind 报错(我什至不确定代码在调试成功后是否能满足我的要求,所以如果有其他方法,请告诉我)。我将html内容存储在一个字符串指针中,其中有多个URL(包括绝对URL和相对URL,例如http://www.google.com、//www.google.com、/a.html、a.html等)。我想将它们一个一个提取出来,分别存入另一个字符串指针中。
我也在考虑使用strstr(),但是我不知道如何获取第二个url。
我的代码(我在这里跳过断言)使用 sscanf:
int
main(int argc, char* argv[]) {
char *remain_html = (char *)malloc(sizeof(char) * 1001);
char *url = (char *)malloc(sizeof(char) * 101);
char *html = "<A HREF=\"http://www.google.com\">navigation</a>"
"<a href=\"/a.html\">search</a>";
printf("html: %s\n\n", html);
sscanf(html, "<a href=\"%s", remain_html);
printf("after first href tag: %s\n\n", remain_html);
sscanf(remain_html, "%s\">", url);
printf("first web: %s\n\n", url);
sscanf(remain_html, "<a href=\"%s", remain_html);
printf("after second href tag: %s\n\n", remain_html);
free(remain_html);
free(url);
}
valgrind 给出:条件跳转或移动取决于未初始化的值。
如果有人可以帮忙,非常感谢!
【问题讨论】:
-
您的问题是您帖子的第一句话,还是如何解决底部的错误?
-
因为错误很清楚,但是要理解它,你必须知道“条件”、“跳转”、“移动”和“单元化”这三个词是什么意思。
-
为什么要重新发明轮子? Parse html using C 可以追溯到 2009 年。此外,RegEx match open tags except XHTML self-contained tags 的答案包含有关为什么正则表达式和 HTML 不能一起使用的信息。
-
@Robert Harvey 第一句话是我的最终目标。我试图通过以下代码解决它,它给出了错误。我要问的是我的代码是否能给出我的愿望,如何修改它并修复错误,如果没有,解决它的可行方法是什么。