Google Crawl?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
umutcanster
Üye
Mesajlar: 153
Kayıt: 13 Tem 2008 11:28

Google Crawl?

Mesaj gönderen umutcanster » 25 Nis 2009 03:43

arkadaşlar programımda hızlı arama yeri yapıyorum....
yazan kelimeyi googlede arayıp link ve isimleriyle listbox'a atacak tıklanınca o site açılcak internet explorer penceresinden...

Biliyorum zor fakat bulamadım hiç bir yerde

mkysoft
Kıdemli Üye
Mesajlar: 2997
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Google Crawl?

Mesaj gönderen mkysoft » 25 Nis 2009 04:10

arka planda idhttp ile google araması gerçekleştrip linkleri html parse metodlarıyla elde etmelisiniz. linkler için hazır companentlerde mevcut http://www.yunqa.de/delphi/doku.php/pro ... ader/index

umutcanster
Üye
Mesajlar: 153
Kayıt: 13 Tem 2008 11:28

Re: Google Crawl?

Mesaj gönderen umutcanster » 25 Nis 2009 06:22

program tam anlamıyla çalışmıyor hatta hiç çalışmıyor...

html parse olayını biraz daha açabilir misiniz?

mkysoft
Kıdemli Üye
Mesajlar: 2997
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Google Crawl?

Mesaj gönderen mkysoft » 25 Nis 2009 07:47

html parse, html kodlarının içerisinde size lazım olan taglar arasındaki bilgiyi bulma işi. Çalışmayan nedir anlayamadım.

umutcanster
Üye
Mesajlar: 153
Kayıt: 13 Tem 2008 11:28

Re: Google Crawl?

Mesaj gönderen umutcanster » 25 Nis 2009 07:54

daha doğrusu program html verilerini tam okuyamıyor ki şuanda delphiyi çalıştıramıyorum....
"invalid filename" alıyorum....öncelikle şu sorunum çözülse problemimi daha iyi anlatacağıma inanıyorum

mkysoft
Kıdemli Üye
Mesajlar: 2997
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Google Crawl?

Mesaj gönderen mkysoft » 25 Nis 2009 08:00

sildiğiniz companentleri tekrar kurun, sırayla kaldırın. invailed file name hatasında dosyanın adını yazmıyor mu?
verdiğim adresdeki google reader, eski kalmış olabilir, google sistemini değiştirmiştir. http://www.yunqa.de/delphi/doku.php/pro ... figrqds2d1 adresindeki genel amaçlı html parseri kullanın.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: Google Crawl?

Mesaj gönderen mrmarman » 26 Nis 2009 09:01

Tahmin ettiğim şeyi yapıyorsan (hit arttırmak, google aramalarında üste çıkarma için uygulama) daha başlamadan önemli bir ayrıntıya dikkatini çekmek isterim.

Bu parse işlemini kendin yapsan amacına uygun bir işlem yapmış olursun. Çünkü :

Ben daha önce kendim için benzer bir uygulama hazırladım. Tecrübe ettiğim konu, google taraması yaptığın browser üzerinden ilgili linke tıkladığında google referanslı arama yapmış oluyorsun. Bu da sitenin hitini olumlu yönde bir tane arttırmış oluyor. Diğer türlüsü; google'da aramış olmak tek başına bişey ifade etmiyor. Bunu neden diyorum, sen listbox'ta biriktirdiğin linki okuyup müstakil olarak Navigate ettirdiğinde google'ın referansını kaybetmiş olursun. Bilgilerinize sunulur...

Aksi ise bu yazılanları dikkate almana gerek yok. Yine de parse işlemine çalış çok zor değildir. Sitede DelphiTürkiye - RSS başlığı ile bir örnek hazırlamıştım. Çalışır durumdadır. İncelersin...

Başarılar.
Resim Resim

umutcanster
Üye
Mesajlar: 153
Kayıt: 13 Tem 2008 11:28

Re: Google Crawl?

Mesaj gönderen umutcanster » 26 Nis 2009 09:14

yok hit gibi düşüncem yok...
sadece son günlerdeki googlede olay olayı otomatik tanımlama gibi düzeneği programıma eklemek istiyorum

fakat ;
sizin rss programınızı inceledim
sorduğum soru şunlar ;
+ programa login olurken program nerden bu "username,password" bilgilerini eşleştirip kontrol ediyor ?
Yoksa buradaki listeden mi :

Kod: Tümünü seç

http://www.delphiturkiye.com/forum/memberlist.php
+ ayrıca bir türlü parse olayını googleye monte edemedim çok hata karşılaştı herhalde tam olarak yapamadım....monte edilebilecek örnek kod verebilirseniz minnettar kalırım....

Teşekkürler hocam.

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: Google Crawl?

Mesaj gönderen mrmarman » 26 Nis 2009 10:45

Biliyorsun veya araştırınca göreceksin, bir çağrıyı / veri grubu bir siteye GET veya POST metodu ile gönderebilirsin. GET metodu direkt adres satırından açık olarak yapılır. POST metdu ile ise parametre bloğu olarak gizli yapılır. RSS örneğinde POST metodu kullanılıyor.

Kod: Tümünü seç

    Url := 'http://www.delphiturkiye.com/forum/ucp.php?mode=login';
    Parametreler.Add(Format('username=%s', [Edit1.Text]));
    Parametreler.Add(Format('password=%s', [Edit2.Text]));
    Parametreler.Add('mode=login');
    Parametreler.Add('login=Oturum Aç');


Konumuza gelirsek, aşağıda sana google için parse fonksiyonu veriyorum. Bir ListView gösteriyorsun ona Google tarama sonuçlarını yansıtıyor.
Parse procedure aşağıdaki gibi. En altta da uygulamayı bulacaksın..
Resim

Kaynak Kodlarıyla Örnek - RapidShare Linki
Listeden çift mouse tıklaması yaparsan explorer penceresinde bu linki görüntüler...

Kod: Tümünü seç

const
  AraFormat = 'http://www.google.com.tr/search?as_q=%s&hl=tr&num=100&btnG=Google''da Ara&as_epq=&as_oq=&as_eq=&lr=&cr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=&as_rights=&safe=images';

procedure GoogleParse( WebBrowser:TWebBrowser; ListView:TListView );
  Type tLink = Record
    Baslik,
    URL,
    icerik : String;
  End;

  function TaglariTemizle(Gelen: string): string;
  var
    Gecici: string;
    Basla, Bitis: Integer;
  begin
    Gecici := Gelen;
    If Trim(Gelen) <> '' then
    begin
      Gecici := StringReplace( Gecici, '&nbsp;', '', [rfReplaceAll, rfIgnoreCase]);
      Gecici := StringReplace( Gecici, '&',  '', [rfReplaceAll, rfIgnoreCase]);

      Basla := Pos('<', Gecici);
      Bitis := Pos('>', Gecici);
      While (Basla > 0) and (Bitis > 0) and (Bitis > Basla) do
      begin
        Delete(Gecici, Basla, Bitis - Basla + 1);
        Basla := Pos('<', Gecici);
        Bitis := Pos('>', Gecici);
        Application.ProcessMessages;
      end; // While
    end; // If
    Result := Gecici;
  end;
var
  Gelen,
  Link,
  Ara   : String;
  L     : tLink;
begin
  ListView.Items.Clear;
  ListView.Enabled := False;
  Gelen := WebBrowser.OleObject.Document.Body.InnerHTML;
  Link := '<H3 class=';
  while Pos(Link, Gelen) > 0 do begin
    Delete(Gelen, 1, Pos(Link, Gelen) + Length(Link)-1 );

    Ara := 'href="';
    Delete(Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1 );
    l.URL := Copy(Gelen, 1, Pos('"', Gelen)-1);

    Ara := '>';
    Delete(Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1 );
    l.Baslik := TaglariTemizle( Copy(Gelen, 1, Pos('</H3>', Gelen)-1) );

    Ara := '</H3>';
    Delete(Gelen, 1, Pos(Ara, Gelen) + Length(Ara)-1 );
    l.icerik := TaglariTemizle( copy(Gelen, 1, Pos('<CITE>', Gelen)-1) );

    With ListView.Items.Add do begin
      Caption := '';
      Subitems.Add( l.Baslik );
      Subitems.Add( l.icerik );
      Subitems.Add( l.URL );
    end;
  end;
  ListView.Enabled := True;
end;
Uygulaması :
forma bir adet TListView bir adet TWebBrowser ve bir adet de TEdit koy. Sonra bir buton altına da en altta göreceğin örnek uygulamayı ekle...

Kod: Tümünü seç

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  WebBrowser1.Navigate( Format(AraFormat, [Edit1.text]) );
  while WebBrowser1.ReadyState <> READYSTATE_COMPLETE
    do Application.ProcessMessages;
  GoogleParse( WebBrowser1, ListView1 );
  ListView1.RowSelect := True;
end;
En son mrmarman tarafından 01 Nis 2011 07:48 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Resim Resim

umutcanster
Üye
Mesajlar: 153
Kayıt: 13 Tem 2008 11:28

Re: Google Crawl?

Mesaj gönderen umutcanster » 27 Nis 2009 01:31

Allah razı olsun Muharrem hocam ,teşekkürler fakat herhalde çok acemiyim ;
+ Post metodunu biliyorum fakat o üye eşleştirmesini hala göremedim
mesela ;
sizin örnek programınızdaki oturum yerine :
kullanıcı adı : Saçmasapan
kullanıcı şifresi : saçmassapn

gibi varolmayan bir kullanıcı ismini girdiğimizde programınız bu kullanıcı adı ve şifresini nasıl doğru olup olmadığını,forumda bu kullanıcı ismi olup olmadığını anlayacak?

+ yaptınız sağolun örnek google html parse : sayfa 1 deki sonuçlarımı gösteriyor yoksa tüm sayfadaki örneklerimi?

teşekkürler sizin başınızı ütülediğimi biliyorum fakat acemiliğime verin...teşekkür ve saygılarım..

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: Google Crawl?

Mesaj gönderen mrmarman » 27 Nis 2009 01:59

Login olurken kullanıcı adı de şifresini yolluyoruz. Sonuçta sunucu bize kullanıcı var ya da yok demiyor mu ? işte bu bize bu kullanıcının var olmadığını veya şifresinin hatalı olduğunu yine parse ederek okuyabiliyoruz.

Google olayında da ilk 100 sonucu isteyen kod hazırladım. Dilersen parse işlemi esnasında recursive ( iç içe ) aynı fonksiyonun kendisini çağırmasını sağlayıp tüm sayfaları bir bir dolaştırabilirsin. Bu senin elinde.
Resim Resim

umutcanster
Üye
Mesajlar: 153
Kayıt: 13 Tem 2008 11:28

Re: Google Crawl?

Mesaj gönderen umutcanster » 27 Nis 2009 02:26

mrmarman yazdı:Login olurken kullanıcı adı de şifresini yolluyoruz. Sonuçta sunucu bize kullanıcı var ya da yok demiyor mu ? işte bu bize bu kullanıcının var olmadığını veya şifresinin hatalı olduğunu yine parse ederek okuyabiliyoruz.

Google olayında da ilk 100 sonucu isteyen kod hazırladım. Dilersen parse işlemi esnasında recursive ( iç içe ) aynı fonksiyonun kendisini çağırmasını sağlayıp tüm sayfaları bir bir dolaştırabilirsin. Bu senin elinde.
teşekkürler hocam deneyeceğim dediklerinizi...
Ne kadar teşekkür etsem azdır.

Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 02:10
Konum: İstanbul & Gebze Karışık

Re: Google Crawl?

Mesaj gönderen conari » 27 Nis 2009 03:46

Hoca'yı tep takdir etmişimdir.
Programı tabiki indirdim birşeyler kaparız illaki diye :)

Yanlız IE den midir bilmem bende İçerik lerde kare kare kutucuklar çıktı sonra içerik yazıyor.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim

Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4731
Kayıt: 09 Ara 2003 08:13
Konum: Ankara
İletişim:

Re: Google Crawl?

Mesaj gönderen mrmarman » 27 Nis 2009 04:20

@conari muhtemelen Explorer ayarlarından kaynaklıdır, çünkü verdiğim ekran görüntüsündeki şekilde sonuç alıyorum. Sorun devam ederse, gelen HTML veriyi önce UTF8 edip parse işlemine öyle başla. Tarama sonuçlarından bakarak bilgisayardan bilgisayara farklılık olabileceğinden öngörünü de kullanabilirsin.

başarılar..
Resim Resim

umutcanster
Üye
Mesajlar: 153
Kayıt: 13 Tem 2008 11:28

Re: Google Crawl?

Mesaj gönderen umutcanster » 27 Nis 2009 06:37

hocam ilk 100 sonuç'a ayarlamışsınız fakat bunu daha da kısaltıp veya uzatabilir miyiz...
biraz inceledim :

Kod: Tümünü seç

Format(AraFormat, [Edit1.text])
tüm olay bunun üzerine kurulu herhalde çünkü ;

Kod: Tümünü seç

const
  AraFormat = 'http://www.google.com.tr/search?as_q=%s&hl=tr&num=100&btnG=Google''da Ara&as_epq=&as_oq=&as_eq=&lr=&cr=&as_ft=i&as_filetype=&as_qdr=all&as_occt=any&as_dt=i&as_sitesearch=&as_rights=&safe=images';
buradaki const'tan anladığım kadarıyla :

Kod: Tümünü seç

earch?as_q=%s&hl=tr&num=100&btnG=Googl
bu kısımda ki "100" harfi 100 sonuç'u listeliyor ben bunu normal iexplorer'de açtığımda ve bunu 250 yaptığımda 250 sonuç listeleniyor ...
fakat programda böyle birşey yaptığımda yanı 100 harfini 150 veya 200 yaptığımda yine ilk 100 sonuç gösteriliyor...acaba çok yalnış yolda mıyım?

Cevapla