C 计算并解析html文件中的所有href链接
在我的问题之后,我一直在尝试解析html文件中的href字符串,以便将该字符串发送到我前面问题的解决方案中 这就是我所拥有的,但它不起作用C 计算并解析html文件中的所有href链接,c,parsing,C,Parsing,在我的问题之后,我一直在尝试解析html文件中的href字符串,以便将该字符串发送到我前面问题的解决方案中 这就是我所拥有的,但它不起作用 void ParseUrls(char* Buffer) { char *begin = Buffer; char *end = NULL; int total = 0; while(strstr(begin, "href=\"") != NULL) { end = strstr(begin,
void ParseUrls(char* Buffer)
{
char *begin = Buffer;
char *end = NULL;
int total = 0;
while(strstr(begin, "href=\"") != NULL)
{
end = strstr(begin, "</a>");
if(end != NULL)
{
char *url = (char*) malloc (1000 * sizeof(char));
strncpy(url, begin, 100);
printf("URL = %s\n", url);
if(url) free(url);
}
total++;
begin++;
}
printf("Total URLs = %d\n", total);
return;
}
void解析URL(字符*缓冲区)
{
char*begin=Buffer;
char*end=NULL;
int-total=0;
while(strstr(begin,“href=\”)!=NULL)
{
结束=strstr(开始“”;
如果(结束!=NULL)
{
char*url=(char*)malloc(1000*sizeof(char));
strncpy(url,begin,100);
printf(“URL=%s\n”,URL);
如果(url)免费(url);
}
总计++;
begin++;
}
printf(“总URL=%d\n”,总计);
返回;
}
基本上,我需要将href的信息提取到字符串中,类似于:
非常感谢您的帮助。这并不能真正回答您关于此代码的问题,但使用C库来完成此操作可能更可靠,例如
HTML解析看起来很容易,但有些边缘情况使使用已知有效的东西比自己使用它们更容易。这并不能真正回答您关于这段代码的问题,但使用C库来实现这一点可能更可靠,例如
HTML解析看起来很简单,但有些边缘情况使使用已知有效的东西比自己使用它们更容易。这段代码有很多错误
- 在循环中,每次只能增加一个开始。这意味着您会一次又一次地找到相同的href。我想您是想将
移动到开始
之后结束
- strncpy通常会复制100个字符(因为HTML会更长),因此不会nul终止字符串。您希望
='\0'在某个地方url[100]
- 为什么分配1000个字符而只使用100个
- 您搜索以begin开头的
。这意味着如果href=”“前面有一个,您将找到它end
- 你不能用
做任何事情end
- 为什么不在URL的末尾搜索终止引用
"<a href=\"/email_services.php\">Email services</a> "
“”
它打印
URL = <a href="/email_services.php">Email services</a>
URL = a href="/email_services.php">Email services</a>
URL = href="/email_services.php">Email services</a>
URL = href="/email_services.php">Email services</a>
Total URLs = 4
URL=
URL=a href=“/email\u services.php”>电子邮件服务
URL=href=“/email\u services.php”>电子邮件服务
URL=href=“/email\u services.php”>电子邮件服务
URL总数=4
对于空间的分配,我认为您应该保留strstr的结果“href=\”(称之为start
,然后您需要的大小是end-start
(+1表示终止NUL)。分配那么多空间,strncp将NUL和您父母的兄弟姐妹Robert加在一起
另外,请记住href=不是锚的唯一标记。它也可以出现在其他一些标记中。此代码有很多错误
- 在循环中,每次只能增加一个开始。这意味着您会一次又一次地找到相同的href。我想您是想将
移动到开始
之后结束
- strncpy通常会复制100个字符(因为HTML会更长),因此不会nul终止字符串。您希望
='\0'在某个地方url[100]
- 为什么分配1000个字符而只使用100个
- 您搜索以begin开头的
。这意味着如果href=”“前面有一个,您将找到它end
- 你不能用
做任何事情end
- 为什么不在URL的末尾搜索终止引用
"<a href=\"/email_services.php\">Email services</a> "
“”
它打印
URL = <a href="/email_services.php">Email services</a>
URL = a href="/email_services.php">Email services</a>
URL = href="/email_services.php">Email services</a>
URL = href="/email_services.php">Email services</a>
Total URLs = 4
URL=
URL=a href=“/email\u services.php”>电子邮件服务
URL=href=“/email\u services.php”>电子邮件服务
URL=href=“/email\u services.php”>电子邮件服务
URL总数=4
对于空间的分配,我认为您应该保留strstr的结果“href=\”(称之为start
,然后您需要的大小是end-start
(+1表示终止NUL)。分配那么多空间,strncp将NUL和您父母的兄弟姐妹Robert加在一起
另外,请记住href=不是锚的唯一标记。它也可以出现在其他一些标记中。“它不工作”对您的程序不是很有帮助的描述。它是否通过编译器?它是否提供任何输出?不,它只获取它在
缓冲区中找到的任何随机字符串,而不是之间的字符串。它不工作"对你的程序不是很有帮助的描述。它通过编译器了吗?它有输出吗?不,它只得到它在缓冲区中找到的任意随机字符串,而不是中间的字符串谢谢,但我不想用外部库来做这样的事情。谢谢,但我不想用外部库来做像这样的东西。保罗,谢谢你的指点。我用100只是为了测试,因为我得到了各种各样的东西,我只是想检查前100个字符。在任何情况下,我都是分配1024的url。你有没有一个可能帮助我做这件事的片段?好的,你介意解释一下我如何修复我发布的代码吗假设这是一个学习练习,我认为如果你仍然无法破解你的问题,你应该尝试更新你的问题。要给你一个示例文件来使用:只需谷歌一些东西,搜索后从谷歌提取html源代码并将其提供给函数是的,我就是这么做的。你应该这样做:)保罗,谢谢你的指点。我用100只是为了测试,因为我得到了所有的东西,我只想检查前100个字符。无论如何,我是