C# ile html kodlarını istediğimiz gibi yönetebilmemizi sağlayan bir kütüphane Html Agility Pack (HAP) kullanarak C# ile web botu yapımından kısaca bahsedelim. Görseldeki gibi sitemizdeki yazıların başlıklarını çeken mini bir bot yapalım. Kütüphanenin web sayfasına buradan, nuget paketi sayfasınada buradan ulaşabilirsiniz.
C# projelerinize yükleme şekli:
(Package Manager Console)
1 |
Install-Package HtmlAgilityPack |
Class içerisinde kullanım için:
1 2 |
using HtmlAgilityPack; using System.Net; |
Site kodlarını indirme
Örnek olarak blog sitemizi‘i ele alalım. Postlarda başlıkları çeken bir uygulama yapalım. Öncelikle sitenin html kodlarını bir string’e atamamız gerekiyor. Tükçe karakterleri tanımak için WebClient sınıfının Encoding özelliğini UTF8 olarak tanımlamayı unutmuyoruz. SercivePointManager ise https olan güvenli sayfalar için tls bağlantısı kurarken hata almamamız için eklenir.
1 2 3 4 5 6 |
Uri url = new Uri("https://kodblogum.com"); WebClient client = new WebClient(); client.Encoding = Encoding.UTF8; ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; string html = client.DownloadString(url); |
Html kodları HAP’a yükleme
String olarak çektiğimiz kodları Html Agility Pack ile incelemek ve ayrıştırmak için bir document oluşturuyoruz.
1 2 |
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); document.LoadHtml(html); |
Bot oluşturma
İşin en sıkıntılı kısmı bu kodlardan istediğimiz kısımları çekmektir. Önce botunu yazdığımız siteye girip çekmek istediğimiz kısmı ayırt eden html özelliği buluyoruz. Bunu siteye sağ tıklayıp ögeyi denetle yaparak bulabiliriz. Bizim senaryomuza göre çekmek istediğimiz kısım başlıklar h3 elementinin entry-title td-module-title classının textinde saklı.
1 2 3 4 5 6 |
HtmlNodeCollection titles = document.DocumentNode.SelectNodes("//h3[@class='entry-title td-module-title']"); foreach (HtmlNode item in titles) { string baslik = item.InnerText; } |
Kodblogum.com sitemizden yazıların başlıklarını çeken C# ile web botu örneğini tamamlamış olduk. Proje kodlarına github linkinden ulaşabilirsiniz.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
kodunda Tsl12 nin altı kırmızı yanıyor öyle birşey yok diyor
Projeniz en az .net 4.5 sürümü olmalıdır. Alt sürümlerinde System.Net kütüphanesinde Tls12 olmadığı için güvenli bağlantı oluşturulamayabilir.