【发布时间】:2013-03-12 21:31:26
【问题描述】:
美好的一天,我希望你能帮助我。我必须编写这段代码(用 C 语言)来下载网站的页面源并将其保存到 html 文件中(我已经这样做了)。下一部分是使用保存的 html 文件从该站点提取文本。
我脑子里有这个算法步骤:
假设我们有一个包含以下内容的 html 文件:
你好再见!
- 查找“”字符串,跳过“”字符串。 (这可以用 strstr() 来实现)
- 将指针设置为“”的第一个“>”。 (使用 strchr()??)
- 检查字符串中的下一个字符是否为“”。重复检查 (3)。 b.) 如果否,则获取字符串直到下一个“
- 最后,我想将字符串保存到 file.txt。 (fwite?或 fopen() 中的选项 a+)。
从逻辑上讲,这是正确的,对吧? 作为编程的初学者,我总是会出错。我写了一段代码,但总是导致分段错误。
请帮助我/告诉我我的代码有什么问题: Dummy - 包含 html 代码的文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <time.h>
int get_fileSize(FILE*);
int main(){
FILE *dummy = fopen("Dummy2","r");
int filesize = get_fileSize(dummy);
printf("Size of dummy = %d Bytes.\n", filesize);
char *newString = (char*)malloc((sizeof(char*))*(filesize));
if(dummy){
fread(newString, sizeof(char*), filesize, dummy);
}
char *tempString = (char*)malloc((sizeof(char*))*(filesize));
char *finalString = (char*)malloc((sizeof(char*))*(filesize));
finalString = "\0";
tempString = strtok(newString, "<");
do{
//printf("%s\n",tempString);
tempString = strtok(NULL, ">");
if(tempString[1]!='<'){
sprintf(finalString,"%s%s",finalString,tempString);
}else continue;
}while(*(newString++)!='\0');
puts(finalString);
return 0;
}
int get_fileSize(FILE *dummy){
int size;
struct stat file;
fstat(fileno(dummy), &file);
size = file.st_size;
return size;
}
【问题讨论】:
-
不简单地解析 HTML
-
您要提取的 HTML 元素到底是什么?为什么不使用可以解析 HTML/XML 的库?
-
@MichaelFoukarakis,先生,我尽可能不想使用这些库。我还在学习 C 语言,我被指示先用经典方法来学习。
-
“经典方式”是使用标准库(即不第二次实现轮子)。另一种选择是浏览标准库,提取接口,并为自己实现主体作为学习的问题。您应该始终戴上标有“系统开发人员”或“应用程序开发人员”的帽子,并区分两者,不要混用。
-
您应该考虑更改问题的名称以说明您希望在没有库的情况下实现它。这是一个常见的问题,但你想要一个不常见的答案。