Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.

Yazılım Soruları

0

c# ta siteden veri çekmek

Merhaba arkadaşlar ben web sitesinden bi veri çekmek istiyorum ama internette aradım sürekli <title> içindeki yazıyı çekiyorlar. Bazılarını anlamadım o yüzden bana yardımcı olursanız çok sevinirim. Ben siteden title değilde burdaki html kodundaki
<p id="contract">
	<b>Geliştime masrafları </b> seviye 3:<br>
	<img class="r1" src="assets/x.gif" alt="Odun" title="Odun">225 |
	<img class="r2" src="assets/x.gif" alt="Tuğla" title="Tuğla">110 |
	<img class="r3" src="assets/x.gif" alt="Demir" title="Demir">225 |
	<img class="r4" src="assets/x.gif" alt="Tahıl&shy;" title="Tahıl&shy;">140 |
	<img class="r5" src="assets/x.gif" alt="Tahıl Tüketimi" title="Tahıl Tüketimi">1 |
	<img class="clock" src="assets/x.gif" alt="Dönem" title="Dönem">0:00:00<br>
	<a class="build" href="village1.php?id=5&amp;k=48bdc">seviye atlat 3</a>
</p>

0:00:00 yerini Label'a çekmek istiyorum nasıl yapabilirim? Yardım ederseniz çok sevinirim 

1 Cevap

0
C# ile HTML belgesi içindeki koddan bir etiketin içeriğini almak / HTML'yi çözümlemek için en çok tercih edilen yöntem HtmlAgilityPack isimli bir kütüphaneyi kullanmaktır.

Bu kütüphanede HTML belgesini yükleyip, XPath ile etiket veya etiketlere ulaşıp içeriğini alabilirsiniz.

HtmlAgilityPack buradan indirilebilir. İndirdikten sonra uygun .NET sürümünün klasöründeki dosyaları proje dizinine kopyalayın. Daha sonra Solution Explorer'dan projenizi sağ tıklayıp Add/Reference seeneği ile dll dosyasını projenize ekleyin. Nuget ile de indirebilirsiniz. Ancak kopyalama yolu daha sadedir.

Yanlız XPath bilmeniz gerekiyor.

İçinde sizin sorunuzda belirttiğiniz HTML kodu bulunan bir HTML belgesi için şöyle bir örnek verebiliriz:


void cozumle(string adres)
{
	// Bir WebClient ile sayfanın tamamını string olarak al.
	WebClient client = new WebClient();
	string htmlString = client.DownloadString(adres);

	// htmlBelgesiument nesnesi oluştur.
	HtmlAgilityPack.HtmlDocument htmlBelgesi = new HtmlAgilityPack.HtmlDocument();

	// Etiket kapatma hatalarını düzeltsin.
	htmlBelgesi.OptionFixNestedTags = true;

	// Belgeyi çözümle
	htmlBelgesi.LoadHtml(htmlString);

	// id özellik değeri contract olan etiketin içindeki 6. img etiketinden sonra gelen ilk 
        // metin düğümünü bul ve secilenler isimli koleksiyona ata.
        HtmlAgilityPack.HtmlNodeCollection secilenler = htmlBelgesi.DocumentNode.SelectNodes("(/p[@id='contract']//img)[6]/following-sibling::text()");

	if (secilenler != null) // Etiket bulabildiyse ... (Şarta uyan etiket bulunamadıysa null döndürüyor.)
	{ 
		// Aranan secilenler'in ilk elemanıdır. Bunun InnerText özellik değerini label1'in
                // Text özelliğine ata.
                label1.Text = secilenler[0].InnerText;
	}

}

Yukarıda da söylediğim gibi biraz XPath öğrenmek gerekiyor. Ben şu anda müsait olmadığımdan kodu deneyemedim. Eğer soruya bir ekiniz olursa veya çalızmazsa üye olup bu cevap altına bir yorum ekleyerek bildirin.


Cevaplayan: 08.07.16 20:27
cevapsitesi
102,035p 16ü
Cevabı seçen: 12.07.16 14:46
canora
101,387p 4ü