C#nedir?com
 
YAZAR HAKKINDA
Mustafa Erhan Ersoy
Mustafa Erhan Ersoy
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
14 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Mustafa Erhan Ersoy
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Orta
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 5.9.2003
Okunma Sayısı : 30623
Yorum Sayısı : 8     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 12.4.2021
Turhal Temizer
Mac OS/X Removing CUDA 12.4.2021
Burak Selim Şenyurt
Tie Fighter Değil, Project Tye! 12.4.2021
Burak Selim Şenyurt
Stackoverflow Sevgi Anketinde Yıllardır Bir Numara Çıkan Programlama Dili Rust Kimdir? 12.4.2021
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Bir Web Sitesindeki E-Mail Adreslerini Yakalamak (Düzenli İfadeler 2)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Gene şu sıkıcı düzenli ifadeler değil mi? Bu makalede düzenli ifadelerin ne kadar etkileyici olduğunu bir örnek üzerinde anlatmaya çalışacağım.
Web sitelerinin birebir kopyasını kendi bilgisayarınıza kopyalayan ( Teleport gibi) programları bilirsiniz. Önce bir sayfanın kaynak kodunu indirir. İçindeki linkleri ve resim dosyalarını belirler. Sonra sıra bu link ve resim dosyalarına gelir.

Hiç elinizdeki kaynak kodun linklerini nasıl ayıklayacağınızı düşündünüz mü?
İşte düzenli ifadeler burada gerçekten harikalar yaratır.
Fazla uzatmadan örneğimize geçelim...

E-Mail Yakalayıcı



Şimdi yapacağımız örnekte önce bir web sitesinin kaynak kodunu indirip, içerisindeki e-mail linklerini elde edeceğiz.
Öncelikle sayfanın kaynak kodunu indirelim
Bunun için iki basit metod yazdım. İlki sayfanın adresini kullanıcıdan alıyor, ikincisi sayfaya bağlanıp kaynak kodu indiriyor :

// Adresi Alan Metod :
private string AdresiAl()
{
    string adres="http://" + txtAdres.Text;
    return adres;
}

// Sayfanın Kaynak Kodunu Döndüren Metod :
private string KaynakAl(string adres)
{
    lblStat.Text="Siteye Bağlanıyor...";
    WebResponse benimResponse=null;
    try
    {
        WebRequest benimWebRequest=WebRequest.Create(adres);
        benimResponse=benimWebRequest.GetResponse();
    }
    // Eğer internet bağlantısı yoksa yada site adresi yanlış ise :
    catch(WebException e)
    {
        lblStat.Text="Siteye Bağlanamıyor.";
        return null;
    }
    // Site içeriği stream olarak alınıyor :
    Stream str=benimResponse.GetResponseStream();
    StreamReader reader=new StreamReader(str);
    string kaynak=reader.ReadToEnd();
    // Tüm içerik küçük harfle döndürülüyor.
    //Daha fazla kontrol yapmamak için bir önlem
    return kaynak.ToLower();
}

Sayfanın kaynak kodunu indirdikten sonra içindeki e-mail linklerini bulup bir diziye atan bir başka fonksiyon daha yazdım. Öncelikler e-mail linkini yakalayan deseni (pattern) açıklamaya çalışalım.

Bildiğiniz gibi e-mail linkleri
<a href="mailto:aaa@bbb.ccc"> gibi ifade edilir.

O zaman desenimiz (href=) ifadesi ile başlamalıdır.
Ardından (’) yada (") karakterleri gelebilir.
"(href=)((’)|(""))"

Sonra "mailto:" ifadesi gelir :
"(href=)((’)|(""))(mailto:)"

"mailto:" ifadesinden sonra istediğimiz ifade yani e-mail adresi gelir. Bunu "mail" isminde bir grup tanımlayarak elde edeceğiz.

"(href=)((’)|(""))(mailto:)(?<mail>(.*))"
// (.*) ifadesi kendinden sonra gelen desene kadar her karakteri alan bir desendir.

Şimdi desenimizi sonlandıralım :
"(href=)((’)|(""))(mailto:)(?<mail>(.*))((’)|(""))"


Kısaca, "mailto:" ile tırnak karakterleri arasındaki her ifade bizim için mail grubuna dahil oldu.

Şimdi E-mail adreslerini dizi şeklinde döndüren metodumuzu yazalım :

// Sayfanın içindeki mail adreslerini dizi şeklinde döndüren metod :
private string[] MailAl(string kaynak)
{
    lblStat.Text+= "Kaynak kod alındı... " + "Mailler ayrıştırılıyor... ";
    // Desenimiz :
    string mailDeseni=@"(href=)((’)|(""))(mailto:)(?<mail>(.*))((’)|(""))";
    int i=0;
    // Regular Expressionumuzu tanımlıyoruz :
    Regex benimRegex=new Regex(mailDeseni);
    Match str=benimRegex.Match(kaynak);
    // Oluşturduğumuz deseni sitenin kaynak kodunda karşılaştırıyoruz :
    MatchCollection mailCol=benimRegex.Matches(kaynak);
    string[] mail=new string[mailCol.Count];
    // Bulunan her e-mail adresini mail[] dizisine atıyoruz :
    foreach(Match mailMatch in mailCol)
    {
        mail[i]=mailMatch.Groups["mail"].ToString();
        i++;
    }
    return mail;
}


Şimdi Yakala butonuna basılınca icra edilecek olay kodunu yazalım :


// Şimdi e-mail yakalamak için bu yazdığımız metodları button_Click olayı ile birleştirelim :
private void btnYakala_Click(object sender, System.EventArgs e)
{
    lblStat.Text="";
    if(txtAdres.Text=="")
    {
        MessageBox.Show("Lütfen Bir Adres Girin !");
    }
    else
    {
        // Sitenin Adresini alıyoruz :
        string adres=AdresiAl();
        // Sitenin Kaynak Kodunu alıyoruz :
        string kaynak=KaynakAl(adres);
        // E-Mail adreslerini alıyoruz :
        if(kaynak!=null)
        {
            string[] mail=MailAl(kaynak);
            lblStat.Text+="İşlem sona erdi." + mail.Length + " tane mail adresi yakalandı.";
            foreach(string yakalananMail in mail)
            {
                // Her e-mail adresi listbox’a giriliyor :
                lbxEmail.Items.Add(yakalananMail);
            }
        }
    }
}

Açıklama

Bazı sitelerde frameset kullanıldığından sayfada e-mail linki görülse bile programımız bunları döndürememekte. Bu sayfaların framelerinin linkleri verilerek e-mail adresleri elde edilebilir.
Yine bazı sitelerde linkler javascript kodu ile erişildiğinden bu adreslerde programımız tarafından erişilememektedir.

Bu örnek programın kaynak kodunu buradan indirebilirsiniz.
Makale:
Bir Web Sitesindeki E-Mail Adreslerini Yakalamak (Düzenli İfadeler 2) C#, Visual C# ve .NET Mustafa Erhan Ersoy
  • Yazılan Yorumlar
  • Yorum Yaz
OCA
22
2011
çok yararlı bir makale olmus yalnız Match str=benimRegex.Match(kaynak); bu kod gereksiz galiba ;)
TEM
2
2007
Etik üzerine yapılan tartışmalar Bence yanlış.Bu bir yol yordamdır bunun hangi amaca uygun olarak kullanılcağı kişilere kalmıştır.Kişinin insiyatifindedir.Bence Regular expresion ın kullanımına dair çok güzel bir Türkçe döküman olmuş.Misal vatandaşın teki bu makaleyi okuyarak Site image lerini alan bir program yazabilir (bu sefer mail adresi değilde anchor etiketinde relative yada mutlak link aratabilir) yada başka bir vatandaşta bunu kullanarak spam yazabilir.Bu tamamen kişilere bağlıdır.Şöyle düşünün virüs ve reklam ajanı yazarlarının çoğusunun kaynak kodlarında WinApi vardır diye şimdi WinApi üzerine döküman yazmamak yada okumamak olurmu.
AĞU
24
2004
güzel olmuş faydalı işlere vesile olabilir
HAZ
14
2004
Korunmak için: http://www.mutasyon.net/makaleoku.asp?id=691
ARA
2
2003
Bence gayet güzel ve eğitici bir yazı. tebrikler...
EYL
23
2003
Bence oldukça hoş bir makale olmuş. mail deseni string inden itibaren açıklama biraz daha iyi olabilrdi. Olsun ,anlayana sivrisinek saz..
EYL
5
2003
yazı çok güzel.regex gibi bi konuya eğilmek çok hoş.ancak etik açıdan yanlış bi program bence. bunun dışında grubu nerede tanımlanmış.bu otomatik tanımlanan birşey midir?
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor