こんにちはです。
memo1にあるHTMLのソースから画像タグ(<img src=****>)のアドレスの部分のみを
listboxに取得するには、どのように行えばよろしいでしょうか?
「img src」の文字列を検索して、ヒットした場所の「=」の次の文字が
「"」なら「"」まで、そうでなければ「>」か「(半角スペース)」まで
がアドレス部分ということになるので、その文字が出るまで
s := s + Text(i)
のような感じになると思います。
終了の文字がでたら、その位置から「img src」を再度検索していく…
という風でどうでしょう?
検索は「AnsiPos」などで検索すれば例文がいくらでもヒットすると思い
ます。
http://homepage2.nifty.com/Mr_XRAY/Halbow/Notes/N021.html
といったところも参考になるのではないかと思います.
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=が見つかった場所を最初の場所だけではなく
逐次取得していくにはどのような感じのコーディングがひつようでしょうか
>src=が見つかった場所を最初の場所だけではなく
>逐次取得していくにはどのような感じのコーディングがひつようでしょうか
AnsiPosで検索する場合は、見つかった位置以降の文字列を切出して、その文字列をまたAnsiPosで検索するという手順の繰り返しでしょう。
でも逐次検索するならAnsiStrPosの方が便利。
こんなんでどうでしょう。
# 文字列のダブルコートや、=が含まれていた場合などの処理が抜けています
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;
Delphi5では動作しなかったので、どういうものか分かりませんが、
以下に「retrieve all image links from an HTML document?」
というTipsがありました。
http://www.swissdelphicenter.ch/torry/showcode.php?id=2353
おっ、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
みなさんのおかげで無事取得できました。
aonde様のは凄すぎ(>_<)
どうもありがとうございます。
自分も皆さんのお役にたてるようにガンバリますので
今後ともヨロシクおねがいいたします
ツイート | ![]() |