画像タグの取得

解決


めるん  2005-08-19 04:15:14  No: 17130

こんにちはです。

memo1にあるHTMLのソースから画像タグ(<img src=****>)のアドレスの部分のみを

listboxに取得するには、どのように行えばよろしいでしょうか?


kazu  2005-08-19 06:56:14  No: 17131

「img src」の文字列を検索して、ヒットした場所の「=」の次の文字が
「"」なら「"」まで、そうでなければ「>」か「(半角スペース)」まで
がアドレス部分ということになるので、その文字が出るまで
s := s + Text(i)
のような感じになると思います。
終了の文字がでたら、その位置から「img src」を再度検索していく…
という風でどうでしょう?
検索は「AnsiPos」などで検索すれば例文がいくらでもヒットすると思い
ます。


Mr.XRAY  URL  2005-08-19 07:25:36  No: 17132

http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N021.html

といったところも参考になるのではないかと思います.


めるん  2005-08-19 12:58:23  No: 17133

kazu様、Mr.XRAY様ありがとうございます。
下記のようなHTMLなんですが、改行等でうまく処理できないのですが
***************************************************
      <DIV align=right><IMG height=56 
      src="Images - Photographs - Pictures - Photography.files/pinkbarbottom2.gif" 
      width=74></DIV>
<img src="manero.jpg">
<img 
src="kazan.jpg">
***************************************************

kazu様のようにする場合、src=が見つかった場所を最初の場所だけではなく
逐次取得していくにはどのような感じのコーディングがひつようでしょうか


切出し  2005-08-19 18:38:04  No: 17134

>src=が見つかった場所を最初の場所だけではなく
>逐次取得していくにはどのような感じのコーディングがひつようでしょうか

AnsiPosで検索する場合は、見つかった位置以降の文字列を切出して、その文字列をまたAnsiPosで検索するという手順の繰り返しでしょう。
でも逐次検索するならAnsiStrPosの方が便利。


にしの  2005-08-20 01:07:42  No: 17135

こんなんでどうでしょう。
# 文字列のダブルコートや、=が含まれていた場合などの処理が抜けています
https://www.petitmonte.com/bbs/answers?question_id=2013
の、uHtmlParseを使用。

procedure TForm1.Button1Click(Sender: TObject);
var
  parse: THtmlParse;
  TagName: String;
  Values: TStringList;
begin
  parse := THtmlParse.Create;
  parse.Text := Memo1.Lines.Text;
  Values := TStringList.Create;
  ListBox1.Items.Clear;
  try
    while parse.NextToken(TagName, Values) <> hptEof do
    begin
      if LowerCase(TagName) = 'img' then
      begin
        ListBox1.Items.Add(Values.Values['src']);
      end;
    end;
  finally
    Values.Free;
  end;
end;


deldel  2005-08-20 01:41:19  No: 17136

Delphi5では動作しなかったので、どういうものか分かりませんが、
以下に「retrieve all image links from an HTML document?」
というTipsがありました。

http://www.swissdelphicenter.ch/torry/showcode.php?id=2353


aonde  2005-08-20 02:03:53  No: 17137

おっ、deldel さんに先を越されましたね・・・

ちょっと趣旨が違うかもしれませんが、TWebBrowser では表示しているページのイメージのリンクを列挙することが簡単にできます。相対アドレスが絶対アドレスになってとっても簡単です。

わたしの D6 では以下のソースで

uses
  MSHTML_TLB;

procedure TForm1.FormCreate(Sender: TObject);
begin
  WebBrowser1.Navigate('about:blank');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://www.sakaki.keiaikai.or.jp/home.asp');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
  Document: IHtmlDocument2;
  ImageHref: string;
begin
  for i := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do
  begin
    Document := WebBrowser1.Document as IHtmlDocument2;
    ImageHref := (Document.Images.Item(i, 0) as IHTMLImgElement).Href;
    Memo1.Lines.Add(ImageHref);
  end;
end;

起動して Button1 を押すと 「Delphi 広場」のフレームのうちもっとも大きなページを表示します。
そして Button2 を押すと Memo1 に
 
http://www.sakaki.keiaikai.or.jp/images/logo/title.jpg
http://www.sakaki.keiaikai.or.jp/images/counter/3.gif
http://www.sakaki.keiaikai.or.jp/images/counter/4.gif
http://www.sakaki.keiaikai.or.jp/images/counter/2.gif
http://www.sakaki.keiaikai.or.jp/images/counter/6.gif
http://www.sakaki.keiaikai.or.jp/images/counter/0.gif
http://www.sakaki.keiaikai.or.jp/images/counter/5.gif
http://www.sakaki.keiaikai.or.jp/images/logo/link.gif
http://www.sakaki.keiaikai.or.jp/images/animation/mail.gif

と列挙されます。

元ネタはここです。イメージの URL のほかに縦横のサイズやファイルサイズなども分かります。

http://www.swissdelphicenter.ch/en/showcode.php?id=1601


めるん  2005-08-21 19:56:29  No: 17138

みなさんのおかげで無事取得できました。
aonde様のは凄すぎ(>_<)

どうもありがとうございます。
自分も皆さんのお役にたてるようにガンバリますので
今後ともヨロシクおねがいいたします


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加