Web Sayfasından Veri Çekme Hakkında

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Mugen71
Üye
Mesajlar: 4
Kayıt: 24 Tem 2019 05:03

Web Sayfasından Veri Çekme Hakkında

Mesaj gönderen Mugen71 » 26 Tem 2019 01:40

Herkese Merhaba,

Web sitesinden delphi ile bilgi çekme konusunda çok sayıda site ve makaleye göz atmama rağmen aradığım konuyu halen bulamadım. Biraz zor yoldan kendim birşeyler yapıyorum, ancak 1 dakikada yapabileceğim iş 1 saate çıkıyor.

Örneğin;

Kaynak Kodu

<a data-toggle="tooltip" title="" href="......................." class="item-list-page__item">
<div class="item-list-page__item__color-pane" style="background: linear-gradient(to right, #0F1318, #C5CBC4);"></div>
<h4 class="item-list-page__item__title">01.07.2019</h4>
<h5 class="item-list-page__item__desc">5 YILDIZ</h5>
</a>
</div>
<a data-toggle="tooltip" title="" href="......................." class="item-list-page__item">
<div class="item-list-page__item__color-pane" style="background: linear-gradient(to right, #0F2554, #C46874);"></div>
<h4 class="item-list-page__item__title">05.07.2019</h4>
<h5 class="item-list-page__item__desc">3 YILDIZ</h5>
</a>
</div>
<a data-toggle="tooltip" title="" href="......................." class="item-list-page__item">
<div class="item-list-page__item__color-pane" style="background: linear-gradient(to right, #00294E, #0C1324);"></div>
<h4 class="item-list-page__item__title">05.07.2019</h4>
<h5 class="item-list-page__item__desc">4 YILDIZ</h5>
</a>
</div>

Şeklinde giden ve her sayfada 25 kayıt getiren bir şirket içi web sitemiz var. (Veritabanı konusuna hiç girmeyelim, erişim şansım sıfır)

Bu sayfadan;
Kayıt 1
1. veri : #0F1318
2. veri : #C5CBC4
3. veri : 01.07.2019
4. veri : 5 YILDIZ

Kayıt 2
1. veri : #0F2554
2. veri : #C46874
3. veri : >05.07.2019
4. veri : 3 YILDIZ

Şeklinde 25 Kaydı alıp memo içine alt alta eklemek istiyorum. toplamda 100 satır olacak memo içinde.

Bu konuda destek olabilecek arkadaşlara şimdiden teşekkürler.

ertank
Üye
Mesajlar: 1202
Kayıt: 11 Eyl 2015 11:45

Re: Web Sayfasından Veri Çekme Hakkında

Mesaj gönderen ertank » 26 Tem 2019 07:13

Merhaba,

Kullandığınız Delphi sürümünü belirtmemişsiniz. Aşağıdaki örnek kod Delphi 10.3.2 ile çalışmaktadır. Ayıklanan veri sıralı olarak bir string array içinde çevirmektedir.

Kod: Tümünü seç

function ParseData(List: TStrings): TArray<string>;
const
  Data1 = 'item-list-page__item__color-pane';
var
  I: Integer;
  TempString: string;
begin
  Result := [];
  I := 0;
  while I < List.Count do
  begin
    if Pos(Data1, List[I]) > 0 then
    begin
      TempString := Copy(List[I], Pos('#', List[I]), MaxInt);
      TempString := TempString.Substring(0, TempString.IndexOf(')'));
      Result := Result + TempString.Replace(' ', EmptyStr).Split([',']);
      Inc(I);

      TempString := Copy(List[I], Pos('">', List[I]) + 2, MaxInt);
      TempString := TempString.Substring(0, TempString.IndexOf('</'));
      Result := Result + [TempString];
      Inc(I);

      TempString := Copy(List[I], Pos('">', List[I]) + 2, MaxInt);
      TempString := TempString.Substring(0, TempString.IndexOf('</'));
      Result := Result + [TempString];
    end;
    Inc(I);
  end;
end;

Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1310
Kayıt: 07 May 2009 09:42
Konum: İstanbul
İletişim:

Re: Web Sayfasından Veri Çekme Hakkında

Mesaj gönderen SimaWB » 26 Tem 2019 08:53

IHTMLDocument2 interface'ini kullanarak HTML tag'leri arasında kolayca gezinebilirsiniz.

Kod: Tümünü seç

uses MSHTML;

const
  html_icerik =
    '<a data-toggle="tooltip" title="" href="......................." class="item-list-page__item">' +
    '<div class="item-list-page__item__color-pane" style="background: linear-gradient(to right, #0F1318, #C5CBC4);"></div>' +
    '<h4 class="item-list-page__item__title">01.07.2019</h4>' +
    '<h5 class="item-list-page__item__desc">5 YILDIZ</h5>' +
    '</a>' +
    '</div>' +
    '<a data-toggle="tooltip" title="" href="......................." class="item-list-page__item">' +
    '<div class="item-list-page__item__color-pane" style="background: linear-gradient(to right, #0F2554, #C46874);"></div>' +
    '<h4 class="item-list-page__item__title">05.07.2019</h4>' +
    '<h5 class="item-list-page__item__desc">3 YILDIZ</h5>' +
    '</a>' +
    '</div>' +
    '<a data-toggle="tooltip" title="" href="......................." class="item-list-page__item">' +
    '<div class="item-list-page__item__color-pane" style="background: linear-gradient(to right, #00294E, #0C1324);"></div>' +
    '<h4 class="item-list-page__item__title">05.07.2019</h4>' +
    '<h5 class="item-list-page__item__desc">4 YILDIZ</h5>' +
    '</a>' +
    '</div>';
   
var
  doc, linkler, aDiv, h4, h5 : OleVariant;
  i,j: Integer;
begin
  doc := coHTMLDocument.Create as IHTMLDocument2;
  doc.write(html_icerik);
  doc.close;

  linkler := doc.links; // tüm A tag'ler,
  for i := 0 to linkler.length - 1 do
  begin
    aDiv := linkler.item(i).all.tags('div').item(0); // A tag'i içindeki div'lerin ilki
    ShowMessage(aDiv.style.GetAttribute('background', 0)); //div'in style'ının background özelliği

    h4 := linkler.item(i).all.tags('h4').item(0); // A tag'i içindeki h4'lerin ilki
    ShowMessage(h4.innerText);

    h5 := linkler.item(i).all.tags('h5').item(0); // A tag'i içindeki h5'lerin ilki
    ShowMessage(h5.innerHtml);
  end;
There's no place like 127.0.0.1

Mugen71
Üye
Mesajlar: 4
Kayıt: 24 Tem 2019 05:03

Re: Web Sayfasından Veri Çekme Hakkında

Mesaj gönderen Mugen71 » 26 Tem 2019 07:15

Merhabalar, cevaplar için çok teşekkür ederim. Delphi 7 ve Delphi XE3, XE6 sürümlerini kullanıyorum.
Verdiğiniz kodlar muhteşem bir kaynak, ikisi de güzel çalışıyor. Projenin tamamını bitirdikten sonra sizlerle paylaşırım.
Ellerinize sağlık

Cevapla