Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
C / Sys Prog.
Genel
Mono ve .NET
Silverlight
XML / Web Serv.
X86 Assembly
C++ / C++.NET
J#.NET / Java
.NET 3.x
UML / Analiz
Yazılım Müh.
ASP.NET
C# / VC#/.NET
Mobil Prog.
PHP 5
YAZAR HAKKINDA
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ı
:
38780
Yorum Sayısı
:
8
yorum yaz
SİTE İÇİ ARAMA
Ü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.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
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.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA
26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
26.12.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
C# / VC#/.NET
/
Bir Web Sitesindeki E-Mail Adreslerini Yakalamak (Düzenli İfadeler 2)
Bir Web Sitesindeki E-Mail Adreslerini Yakalamak (Düzenli İfadeler 2)
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
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:
[email protected]
"> 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 listboxa 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
uğur volkan göl
/
üye hakkında
çok yararlı bir makale olmus yalnız Match str=benimRegex.Match(kaynak); bu kod gereksiz galiba ;)
TEM
2
2007
caglar dursun
/
üye hakkında
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
erman olca
/
üye hakkında
güzel olmuş faydalı işlere vesile olabilir
HAZ
14
2004
Necat Bolpaça
/
üye hakkında
Korunmak için: http://www.mutasyon.net/makaleoku.asp?id=691
ARA
2
2003
ismail günay
/
üye hakkında
Bence gayet güzel ve eğitici bir yazı. tebrikler...
EYL
23
2003
Mustafa Ersoy
/
üye hakkında
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
Bahadır ARSLAN
/
üye hakkında
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
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl