用DELPHI 把一个网页的 HTML 去掉,只提取文字怎么做啊。。。。 ( 积分: 100 )

  • 主题发起人 主题发起人 初级程序员
  • 开始时间 开始时间

初级程序员

Unregistered / Unconfirmed
GUEST, unregistred user!
<table width=&quot;100%&quot; border=&quot;0&quot; align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;>
<tr>
<td width=&quot;1&quot; bgcolor=&quot;#68B5E9&quot;></td>
<td background=&quot;../images/bt_bg01.jpg&quot;><div align=&quot;center&quot;><a href=&quot;http://mm.cn2che.com&quot; target=&quot;_blank&quot;>香车美女</a></div></td>
<td width=&quot;8&quot;><img src=&quot;../images/bt_2.jpg&quot; width=&quot;8&quot; height=&quot;26&quot; alt=&quot;&quot;></td>
</tr>
</table>

例如这个,,只保存 香车美女 四个字,
把 < 与 > 中的所有文字,,包括< > 都删除。。请问怎么做啊。。
 
正则表达式
 
使用 TWebBrowser控件分析
// 把字串写到 TWebBrowser
procedure StringToWebBrowser(AWeb :TWebBrowser;const AHTML :string);
var
doc:OleVariant;
begin
// Ole 方法
AWeb.Navigate('about:blank');
while Not Assigned(AWeb.Document) do //等待打开空页完成
begin
Sleep(10);
Application.ProcessMessages ;
end;

if Assigned(AWeb.Document) then
begin
doc := AWeb.Document ;
doc.Write(AHTML);
doc.Close;
AWeb.Refresh ; // 关键,没有 不行呀 --> 特别连续调用时必须有
doc := UnAssigned;
end;
end;

// 把 TWebBrowser 浏览的内容的源码取出来
function GetWebSource(AWeb :TWebBrowser;const pbIsHTMLSource:boolean):widestring;
var
doc : OleVariant;
bIsExit :boolean;
begin
while Not Assigned(AWeb.Document) do //等待打开页完成
begin
Sleep(30);
Application.ProcessMessages ;
end;

if Assigned(AWeb.Document) then
begin
doc := AWeb.Document;
if pbIsHTMLSource then
Result := doc.documentElement.outerHTML // HTML源码
else
begin
bIsExit := False ;
while Not bIsExit do
begin
try
Sleep(30);
Application.ProcessMessages ;
Result := doc.documentElement.outerText; // 解析HTML源码后的文本
bIsExit := True;
except
bIsExit := False;
end;
end;
end;
doc := Unassigned;
end;
end;

或自己写代码分析
参考 http://www.delphibbs.com/delphibbs/dispq.asp?lid=3606355
 
最快的方法:
是用接口操作
剪切、复制、粘贴、全选: 功能无须多说,需要注意的是:剪切和粘贴不仅对编辑框文字,而且对网页上的非编辑框文字同样有效,用得好的话,也许可以做出功能特殊的东东。获得其命令使能状态和执行命令的方法有两种(以复制为例,剪切、粘贴和全选分别将各自的关键字替换即可,分别为CUT,PASTE和SELECTALL):
A、用TWebBrowser的QueryStatusWB方法。
if(QueryStatusWB(OLECMDID_COPY)=OLECMDF_ENABLED) or OLECMDF_SUPPORTED) then ExecWB(OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT, EmptyParam,EmptyParam);
B、用IHTMLDocument2的QueryCommandEnabled方法。
var
Doc: IHTMLDocument2;
begin
Doc :=WebBrowser1.Document as IHTMLDocument2;
if Doc.QueryCommandEnabled('Copy') then
Doc.ExecCommand('Copy',false,EmptyParam);
end;
 
如果是本地文件用这个比较方便了...
非原创 网上抄的代码~~

function Html2Txt(htmlfilename: string): string;
var Mystring:TStrings;
s,lineS:string;
line,Llen,i,j:integer;
rloop:boolean;
begin
rloop:=False;
Mystring:=TStringlist.Create;
s:='';
Mystring.LoadFromFile(htmlfilename);
line:=Mystring.Count;
try
for i:=0 to line-1 do
Begin
lineS:=Mystring;
Llen:=length(lineS);
j:=1;
while (j<=Llen)and(lineS[j]=' ')do
begin
j:=j+1;
s:=s+' ';
End;
while j<=Llen do
Begin
if lineS[j]='<'then
rloop:=True;
if lineS[j]='>'then
Begin
rloop:=False;
j:=j+1;
continue;
End;
if rloop then
begin
j:=j+1;
continue;
end
else
s:=s+lineS[j];
j:=j+1;
End;
s:=s+#13#10;
End;
finally
Mystring.Free;
end;{try}
result:=s;
end;
 
后退
顶部