掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
HTMLから、情報の抜き出し。 (ID:35597)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
TEmbeddedWBはコンポーネントを今回始めて使ってみました。インストールで少し手間取ったのですが、たぶん、特別な設定はしていないと思います。Delphi Personal 6 + Win2000/XPで動作は確認しました。 TFormにTEmbeddedWB、TMemo、TButtonをそれぞれ一つずつ置いてイベントを割り当ててください。あとは、Unit1.pasへそのままコピーでいいと思います。 立ち上げると、このページが表示されます。ボタンを押すと、メモにこのページの投稿欄付近のtype,name,valueの値の情報が記録されます。また、認証キーと確認入力部分に関する情報がメッセージ表示されます。認証キー(確認入力用)に何らかの入力を行って、ボタンを押すとその入力も反映されます。 これを応用すればのど飴さんのご希望に近い形になるのではないかと思います。 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw_EWB, EwbCore, EmbeddedWB; type TForm1 = class(TForm) Memo1: TMemo; EmbeddedWB1: TEmbeddedWB; Button1: TButton; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); begin //ここのページを表示しています。 EmbeddedWB1.Go('https://www.petitmonte.com/bbs/answers?question_id=6516'); end; procedure TForm1.Button1Click(Sender: TObject); var i,j,ItemNo,iEnd:Integer; s,sName:String; GetPlace:Boolean; begin iEnd:=0; GetPlace:=False; Memo1.Clear; Memo1.ScrollBars:=ssVertical; //Htmlを1つずつの要素(Item)毎にスキャンしていきます。 for i:=0 to EmbeddedWB1.OleObject.document.all.Length-1 do begin //Itemの名前をチェックしていきますが、 //名前がついていないItemの場合の例外処理を入れます try s:=EmbeddedWB1.OleObject.document.all.Item(i).Name; except end; //このページの投稿欄のメールアドレスのItemのNameが'EMAIL'です。 if (not GetPlace) and (s='EMAIL') then begin GetPlace:=True; ItemNo:=i+1; iEnd:=i+20; end; //Memo1への表示は投稿欄付近のみに制限します。 if not GetPlace then Continue; if i=iEnd then Break; //HtmlをItem番号とともにMemo1に表示します。 s:=EmbeddedWB1.OleObject.document.all.Item(i).outerHtml; Memo1.Lines.Add(IntToStr(i)+' '+s); //続けて、そのItemでのTag/Type/Name/ValueをItem番号とともにMemo1に表示します //該当情報情報がない場合は表示しません。 for j:=1 to 4 do begin try case j of //ここでは、そのItemに指定した情報タイプが存在しない場合 //エラーとなるので例外処理が必要です 1:s:=EmbeddedWB1.OleObject.document.all.Item(i).tagName; 2:s:=EmbeddedWB1.OleObject.document.all.Item(i).type; 3:s:=EmbeddedWB1.OleObject.document.all.Item(i).Name; 4:s:=EmbeddedWB1.OleObject.document.all.Item(i).Value; end; case j of 1:sName:='Tag'; 2:sName:='Type'; 3:sName:='Name'; 4:sName:='Value'; end; Memo1.Lines.Add(IntToStr(i)+' '+sName+' = '+s); except end; end; end; //ここまでの部分はキーワード等により取得すべき情報の位置を調べて //情報を取得するような方法で処理しました。 //予め欲しい情報のItemのNameがわかっている場合には、直接的に //その情報を取りにいくことが可能です。 //ここでは、認証キーと認証キー(確認入力用)の情報を取得します。 //なお、同一ページ内に同じNameのItemがある場合にはもう一工夫必要であったり、 //また、この方式では指定できないような文字を含んだNameのItemもあります。 for i:=0 to 1 do begin case i of //Nameが'NINSYOU_MOTO'と'NINSYOU'であることは予め調べておきます。 0:ItemNo:=EmbeddedWB1.OleObject.document.all.NINSYOU_MOTO.sourceIndex; 1:ItemNo:=EmbeddedWB1.OleObject.document.all.NINSYOU.sourceIndex; end; ShowMessage('Tag = '+EmbeddedWB1.OleObject.document.all.Item(ItemNo).tagName); ShowMessage('type = '+EmbeddedWB1.OleObject.document.all.Item(ItemNo).type); ShowMessage('Name = '+EmbeddedWB1.OleObject.document.all.Item(ItemNo).Name); ShowMessage('Value = '+EmbeddedWB1.OleObject.document.all.Item(ItemNo).Value); end; end; end.
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.