C# ile WebCrawler Uygulaması

Google, Bing, Yahoo gibi arama motorları, internetteki sayfaları indexlemek için web crawler denilen programcıklar kullanırlar.

Crawler’ların çalışma mantığı basittir;

  1. Web sayfasına git
  2. Sayfanın içeriğini indexle
  3. Sayfadaki her link için 1. adıma geri dön Crawler’ın, sayfadaki linkleri bulabilmesi anahtar adımdır.

Yazacağımız uygulamada, bir web crawler gibi sayfadaki linkleri bulacağız.

Ekran görüntüsündeki formu oluşturduktan sonra, Buton‘un Click olayına ait kodu yazmaya başlayalım.

private void btnLinkleriBul_Click(object sender, EventArgs e) { WebRequest wr = WebRequest.Create(txtAdres.Text); WebResponse ws = wr.GetResponse(); StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8); string response = sr.ReadToEnd(); sr.Close(); ws.Close();

Regex r = new Regex("<a.+href=\"http.+://(.+)\">(.*)</a>");
foreach (Match m in r.Matches(response))
{
    string link = m.Groups[1].Value;
    if (link.IndexOf("\"") > -1)
        link = link.Substring(0, link.IndexOf("\""));
    string metin = m.Groups[2].Value;

    ListViewItem oItem = new ListViewItem(new string[] { metin, link });
    lvSonuc.Items.Add(oItem);
} }</pre> [Code Challenge #1](http://www.enginpolat.com/code-challenge-1/) ve [C# ile Google PageRank Bulma](http://www.enginpolat.com/csharp-ile-google-pagerank-bulma/) yazılarında kullandığım tekniğin aynısı ile sayfanın içeriğini string değişkene alıyoruz.
WebRequest wr = WebRequest.Create(txtAdres.Text);
WebResponse ws = wr.GetResponse();
StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
string response = sr.ReadToEnd();
sr.Close();
ws.Close();

Daha sonra, *Regex* sınıfından yeni bir örnek oluşturup (constructer'ına verdiğimiz parametre önemli), dönen sonuç kümesinin içeriğini *ListView* kontrolüne dolduruyoruz.

Eğer sayfanın içeriğini tuttuğumuz değişkeni veritabanına yazsak, ve sayfada bulduğumuz her link için bu adımları tekrar yapsak, tam bir web crawler uygulaması yazmış olacaktık.

Ama bu noktadan itibaren uygulamayı geliştirmeyi size bırakıyorum (BilgeAdam'daki öğrencilerime hep dediğim gibi, "Bundan sonrası size ödev!")

Projenin bu halini şuradan indirebilirsiniz.

İlgili diğer makaleler

blog comments powered by Disqus

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı