如何快速将成批的html格式文件转换为文本格式?(200分)

  • 主题发起人 主题发起人 zfh
  • 开始时间 开始时间
Z

zfh

Unregistered / Unconfirmed
GUEST, unregistred user!
达到的效果也就是用浏览器将网页另存为文本格式后的结果。只不过由于文件太多,不能一一另存,
只得用编程来解决。
问题的难点在于:
如果用WebBrowser控件载入Html文件后转换保存为文本格式,一是速度不够快,二是如果网页文件
中有弹出窗口等,则在处理过程中将频繁弹出,即使设置为离线方式也不能解决。
我的代码如下:
content:=tstringlist.Create;
ToFile := TStringList.Create;
RetVal := FindFirst(c:/ + '*.html',faAnyFile,SearchRec);
vv := VarArrayCreate([0,0],varVariant);
try
while RetVal = 0 do
begin
content.LoadFromFile(strDirFrm + SearchRec.Name);
vv[0] := content.Text;
HTMLDocument := IE.Document as IHTMLDocument2;
HTMLDocument.write(PSafeArray(TVarData(vv).VArray));
Tofile.Text := HTMLDocument.body.outerText;
HTMLDocument.close;
Tofile.SaveToFile(strDirTo + ChangeFileExt(SearchRec.Name,'.txt'));
RetVal := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
不知哪位高手有办法。
 
程序代码第三行为笔误,应为:
RetVal := FindFirst('c:/*.html',faAnyFile,SearchRec);
 
RetVal := FindFirst('c:/*.html',faAnyFile,SearchRec);
try
while RetVal = 0 do
begin
CopyFile(PChar(strDirFrm+SearchRec.Name), PChar(strDirTo + ChangeFileExt(SearchRec.Name,'.txt'), True);
RetVal := FindNext(SearchRec);
end;
finally
FindClose(SearchRec);
end;
 
Sorry,由于摘取的是程序片断,忘了将程序中的变量替换为明显的形式,以上程序中的
“strDirFrm”是指源文件路径,“strDirTo”是指保存结果的文件夹,本例中可以认为都是“C:/”。
 
To:LeeChange
您好象没有看明白题意,我不是要改变文件的扩展名并保存,而是要提取部分文件内容(也就是只保留文本内容而去掉大量html标记等),按您所说的只是把原文件复制了一份而改了一下扩展名。
 
下载一个HTM2TXT的命令行工具,用你的程序调用它就行了
否则你就要自己分析HTML文件,可以这么做,但没有这个必要。

PS: 我手头有一个转换工具, h2t.com 只有8K, 要的话从我的主页下载。
 
可惜能找到的HTM2TXT工具转换出来的结果都不十分满意,例如基本都无法正确过滤网页中的脚本。
 
如果速度要求不太高的话,用WebBrowser是目前最直接的办法了
关于弹出对话框的问题,你可以使用TEmbeddedWB代替TWebBrowser,有选项可禁止弹框。
 
我用的是Delphi7.0,TEmbeddedWB好像没有支持到此版本的。

在更好的办法出现之前,我现在采取了一种变通的方法,那就是对Html文件进行预处理,去掉
网页中的所有脚本(即过滤所有以“<script ”开始并以“</script>”结尾的字串),
不过由于Html源代码的不规范性(比如出现“< script ”之类),有可能把有用的东西也同时过滤掉。难不成我还得借助于网页吸尘器之类的第三方工具。
 
自己分析吧,比较复杂
<html>
<Title>
<Meta>
<script>
<XML>
<perl>
......
找到这些标准后,自己写,不用TWEBbrowser,速度很快。
 
后退
顶部