• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

Beraber C# ile bot yapalım (Web Sitelerinden Veri Çekelim)

Websitelerinden kendi kodumuz ile veri çekelim ve yayınlayalım, ne dersiniz?

27.03.2013

Yazar: Devrim Altınkurt (Google+)

Kategori: C#.Net

7396

 Internet sayfalarını kod yardımı ile okuyabilmek ve dönen değerleri kullanabilmek için halihazırda iki adet sınıfımız mevcut:

  • HttpWebRequest
  • HttpWebResponse

Bu iki sınıf da System.Net namespace i altında bulunuyor. Dolayısıyla sayfamızın yukarısına using ifadesini eklemeyi unutmuyoruz.

Neyse öncelikle; sayfayı baştan sona HTML olarak indirip bir string değişken içerisine atacak bir metot yazalım.

private static string BilgiCek(string url)
{
    StringBuilder sb = new StringBuilder();
    byte[] buf = new byte[8192];
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    Stream resStream = response.GetResponseStream();
    string tempString = null;
    int count = 0;
    do
    {
        count = resStream.Read(buf, 0, buf.Length);
        if (count != 0)
        {
            tempString = Encoding.UTF8.GetString(buf, 0, count);
            sb.Append(tempString);
        }
    }
    while (count > 0); // any more data to read?
    return sb.ToString();
}

Bu metotla, sayfayı 8k lık dilimler halinde indiriyoruz. Bazen aynı işi yapan daha kısa bir koda da denk gelebilirsiniz.

private static string BilgiCek(string url)
{
    WebRequest istek = HttpWebRequest.Create(url);
    WebResponse cevap = istek.GetResponse();
    StreamReader donenBilgiler = new StreamReader(cevap.GetResponseStream());
    return donenBilgiler.ReadToEnd();
}

İstediğinizi kullanabilirsiniz. Aralarındaki farkı araştırmak size kalmış.

Şimdi gelelim ana metoda. Önce kendimize bir hedef seçelim. Mesela web sitesinin <title>...</title>bilgisini çekmeye çalışalım.

İstediğimiz bilgiyi okuyamama ihtimaline karşı, kodumuzu önce satır sonu karakterlerinden temizleyelim, sonra da RegExp yardımı ile verimizi çekelim:

while (tumu.IndexOf(Environment.NewLine) > -1)
{
    tumu = tumu.Replace(Environment.NewLine, " ");
}

string title = "";
Match m = Regex.Match(tumu, "<title[^>]*>(.*?)</title>",
 RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);

if (m.Success)
{
 tumu = m.Groups[1].Value;
 title = tumu.Trim();
}

Şimdi de bir örnek yapalım:

static void Main(string[] args)
{
    string url = "http://www.daltinkurt.com/Gunluk/70-Sitenize-URL-kisaltma-servisi-ekleyin.aspx";
    string tumu = BilgiCek(url);

    while (tumu.IndexOf(Environment.NewLine) > -1)
    {
        tumu = tumu.Replace(Environment.NewLine, " ");
    }

    string title = "";
    Match m = Regex.Match(tumu, "<title[^>]*>(.*?)</title>",
        RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);

    if (m.Success)
    {
        tumu = m.Groups[1].Value;
        title = tumu.Trim();
    }
    Console.WriteLine(title);
}

Çıktımız:

 

Şimdi de site içeriğinden bilgi almaya çalışalım.

Örnek sayfamız http://www.mgm.gov.tr/tarim/zirai-rapor.aspx olsun.

<h1> .. </h1> tagi içeriğini okumaya çalışalım. Bunu seçme nedenim;

  1. içinde başka tag kullanılmış,
  2. 2 satırdan oluşuyor, yani bir adet "yeni satır" karakterini (Environment.Newline) temizlememiz gerekiyor
  3. son aşamada da split etmemiz gerekiyor.

Buradan buyrun:

static void Main(string[] args)
{
    string url = "http://www.mgm.gov.tr/tarim/zirai-rapor.aspx";
    string html = BilgiCek(url);

    string tarihStr = @"<h1 id=""sfB"">";

    int pos1 = html.IndexOf(tarihStr);
    int pos2 = html.IndexOf("</h1>", pos1);
    string tarih = html.Substring(pos1, pos2 - pos1);
    tarih = ToClearText(tarih);
    string[] pars = tarih.Split("|".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
    Console.WriteLine("-> " + pars[0].Trim() + " <-");
    Console.WriteLine("-> " + pars[1].Trim() + " <-");
}

Ekran çıktısı:

Bu yöntem sayesinde, gözünüze kestirdiğiniz bir siteden "isim sözlüğü", "atasözleri", "İngilizce-Türkçe sözlük" gibi hazırlanması aylar alacak bilgileri kısa zamanda toplayabilirsiniz.

Herkese kolay gelsin.


Not: ToClearText(string) metodu da nereden çıktı diyenlere:

public static string ToClearText(string text)
{
    return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
}

 

Yazar Hakkında

Devrim Altınkurt

Devrim Altınkurt

http://www.daltinkurt.com

MCPD, MCT

Sosyal Medya

ORANLAR

  • 7396izleme

Arkadaşlarınla Paylaş

  • Tweet

1 Yorum

Hüseyin KILIÇ

Hüseyin KILIÇ

11.09.2015

"Merhabalar, Öncelikle değerli paylaşımlarınız için teşekkürler.. Bir sorun var aşamadığım bu konuda, yazınızdan faydalanarak basitçe bir siteden içerik çekmek istiyorum.. Ancak denemediğim yöntem kalmadı neredeyse fakat bir bir türlü Türkçe karakter sorunun çözemiyorum.. ark. intel. com/tr sitesinden h3 içerisindeki veriyi okumaya çalışıyorum fakat küçük harfli Türkçe karakterler "Masa#252;st#252; Bilgisayar İşlemcileri" şekildeki gibi bozuk geliyor. Normalde sitede düzgün görünüyor fakat ctrl+u ile source koda manuel baktığımda da aynı yer bozuk görünüyor. Konu hakkında fikriniz bilginiz var mı acaba? Yardımcı olabilirseniz çok sevinirim.. Saygılarımla.."

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123776
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70839
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51496
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ