Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Blok içinden veri alma
#1
Merhaba,

Web Parse işlemi için aşağıdaki kodları kullanıyorum.
Yaklaşık 100 yakın verileri almaya çalışırken veriler eksik geliyor. Aynı div blogu içindeki link ve açıklamaları nasıl eksiksiz alabilir?



      IDoc.Close;
      I := 0;
      IHrefName := IDoc.Body.All.Tags('a');
      IDivName := IDoc.Body.All.Tags('div');
      ISpanName := IDoc.Body.All.Tags('span');
      IDivSay := Integer(IDoc.Body.All.Tags('div').Length);
      while I < IDivSay do
      begin
        IDiv := IDivName.Item(I);
        if SameText(IDiv.ClassName,  's-card-s-latency-cf-section s-card-border') then // Start
        begin
          ISpan := ISpanName.Item(I);
          IHref := IHrefName.Item(I);
          BoolLink := SameText(IHref.ClassName, 'a-link');
          BoolTitle := SameText(ISpan.ClassName, 'a-color-base a-text-normal');
          if BoolLink then
          begin
            Showmessage(IHref.Href);
          end;
          if BoolTitle then
          begin
            Showmessage(ISpan.InnerText);
          end;
        end;
        Inc(I); // While
      end;
    end;


Örnek div:
<div class="s-card-s-latency-cf-section s-card-border"> <a class="a-link" href="/click?e=Bvacuum%26qi">
<span class="a-color-base a-text-normal">High-Powered 60w Motor</span></div>
Cevapla
#2
Eğer belirli bir kritere göre bazı kısımlar alınacak ise Regex daha uygun bir çözüm olur.

uses System.RegularExpressions;

var
fc: TMatchCollection;
f: TMatch;
rs: string;
begin
//rs := '<a.*?href="([^"]*)"'
rs := '(?Sad?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-&?=%.]+';
fc := TRegEx.Matches(parse_edilecek_veri, rs,[roIgnoreCase]);
for f in fc do
begin
ListBox1.Items.Add(f.Value);
end;
end;
SRHT
Cevapla
#3
(09-11-2022, Saat: 20:42)ARM Adlı Kullanıcıdan Alıntı: Eğer belirli bir kritere göre bazı kısımlar alınacak ise Regex daha uygun bir çözüm olur.

uses System.RegularExpressions;

var
 fc: TMatchCollection;
 f: TMatch;
 rs: string;
begin
//rs := '<a.*?href="([^"]*)"'
 rs := '(?Sad?:https?|ftp):\/\/)?[\w/\-?=%.]+\.[\w/\-&?=%.]+';
 fc := TRegEx.Matches(parse_edilecek_veri, rs,[roIgnoreCase]);
 for f in fc do
 begin
   ListBox1.Items.Add(f.Value);
 end;
end;



Teşekkür ederim;

Fakat Regex ile sadece divdeki verileri alıyorum (a-link) ve (a-color-base a-text-normal) verileri gelmiyor
Cevapla
#4
Verdiğiniz örnek üzerinden Size birkaç küçük örnek paylaşayım. Sağdaki match information penceresinde Group1 ve Group2 diye yazanlar sizin istediğiniz veriler. Burada önemli olan regex söz dizimini nasıl yazdığınız.

https://regex101.com/r/3nIyd6/1

https://regex101.com/r/QGii9M/1

https://regex101.com/r/bCjzgv/1
SRHT
Cevapla
#5
(10-11-2022, Saat: 15:18)ARM Adlı Kullanıcıdan Alıntı: Verdiğiniz örnek üzerinden Size birkaç küçük örnek paylaşayım. Sağdaki match information penceresinde Group1 ve Group2 diye yazanlar sizin istediğiniz veriler. Burada önemli olan regex söz dizimini nasıl yazdığınız.

https://regex101.com/r/3nIyd6/1

https://regex101.com/r/QGii9M/1

https://regex101.com/r/bCjzgv/1


Çok teşekkür ederim yardımcı olduğunuz için.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  IEC 61850 Potokolünden veri alma shooterman 1 413 14-03-2024, Saat: 11:38
Son Yorum: shooterman
  Veri Tabanına Kontrollü Kayıt Yaptırma bünyamin68 15 618 08-03-2024, Saat: 00:06
Son Yorum: TuncayDelphi
  Problem - ZKTeco Cihazlardan Anlık Veri Alma mad85 16 7.952 25-12-2023, Saat: 11:35
Son Yorum: osiso
  [ÇÖZÜLDÜ]Firebase Bearer Token Alma shooterman 8 621 05-12-2023, Saat: 12:17
Son Yorum: shooterman
  Cas Terazi Veri gönderimi Delphi sürüm sorunu KUNTAY 12 4.301 08-11-2023, Saat: 00:06
Son Yorum: berkan



Konuyu Okuyanlar: 1 Ziyaretçi