c# ile başka siteden veri çekme(HtmlAgilityPack)
Öncelikle
http://htmlagilitypack.codeplex.com/ sitesinden Html Agility Pack i indiriyoruz
sonra projemizde sağ üstdeki solution explorerda references e sağ tıklayıp add
reference diyip indirdiğimiz dll i reference ediyoruz
namespace WindowsFormsApplication4
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Uri url = new Uri("http://sondakika.internethaber.com/");
WebClient client = new WebClient();
string html = client.DownloadString(url);
HtmlAgilityPack.HtmlDocument dokuman = new HtmlAgilityPack.HtmlDocument();
dokuman.LoadHtml(html);
HtmlNodeCollection basliklar = dokuman.DocumentNode.SelectNodes("//a");
foreach (var baslik in basliklar)
{
string link = baslik.Attributes["href"].Value;
//a nın içinde geçen linkleri almak istersek
listBox1.Items.Add(baslik.InnerText);
}
}
}
}
_______________________________________________________________________
Ayrıca güzel birmakale de burda var
http://www.ahmetbozkurt.org/asp-net-ile-bot-yazma-mantigi/
Bu makalede, başka sitelerden içerik çekmek için kullanılan, içerik botu
diye adlandırdığımız HTML Parse yöntemini asp.net ile nasıl
oluşturacağımız anlatılmaktadır.
Öncelikle bot olarak adlandırdığımız kod yapısından bahsetmek
istiyorum. Bu makalemde yazımını anlatacağım “bot” diye tabir ettiğimiz
yapı, herhangi bir web sayfasından istediğimiz içeriği çekmemizi ve
gerekirse veritabanına kaydetmemizi sağlayan bir yapıdır.
Basit olarak botun çalışma mantığı şöyledir;
Web sayfasına istek gönderilir,
Gönderilen isteğe karşılık gelen cevap alınır,
Karakter problemine karşı, gelen cevap encode edilir,
Encode edilen cevap okunur ve HTML formatına aktarılarak parçalanır(parse).
Uygulamamızda kullanacağımız HtmlAgilityPack.dll’yi projemize Reference
olarak ekliyoruz. dll’mizin nimetlerinden faydalanabilmek için,
aşağıdaki namespace’lerimizi de codebehind kısmına ekliyoruz.
|
using HtmlAgilityPack;
using System.Net;
using System.Text;
using System.IO;
|
Projemize bir buton ekleyelim ve “Click” event’ına aşağıdaki kodları yazalım.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
HttpWebRequest istek = (HttpWebRequest)WebRequest.Create("http://www.google.com.tr");
HttpWebResponse cevap = (HttpWebResponse)istek.GetResponse();
Encoding cevapkodlama = Encoding.GetEncoding(cevap.CharacterSet);
StreamReader okuyucu = new StreamReader(cevap.GetResponseStream(), cevapkodlama);
string html = okuyucu.ReadToEnd();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNodeCollection col = doc.DocumentNode.SelectNodes("//link[@href='/intl/tr/ads/']");
foreach ( HtmlNode items in col)
{
Response.Write(items.innerHtml);
}
|
HttpWebRequest nesnesi ile Google’a istek yolluyoruz.
HtppWebResponse ile gönderdiğimiz isteğe karşılık gelen cevabı alıp,
Encoding ile karakter problemine karşı önlem alıyoruz.
StreamReader ile gelen cevabı okuyup HTML formatına çeviriyoruz.
HtmlAgilityPack bu aşamadan sonra devreye giriyor.
HtmlNodeCollection ile
HTML Parse işlemine başlıyoruz.
|
HtmlNodeCollection col = doc.DocumentNode.SelectNodes("//link[@href='/intl/tr/ads/']");
|
Kod satırı ile demek istediğimiz şu aslında,
href değeri
/intl/tr/ads/ olan
a tagını getir.
A tagını bu kod satırı ile aldıktan sonra
a tagının elementlerine ulaşabilmek için
foreach döngüsünü kullanıyoruz.
Sonuç aşağıdaki gibi,
Google sayfasında
href değeri
/intl/tr/ads/ olan
a tagı;
Kodlamamız sonucunda botumuzun çektiği değer;
Bir başka duruma daha değinmek istiyorum. Mesela
< i m g > tagının
src değerine ulaşmak istesek ne yapmamız gerekir. Onun kodları da aşağıdaki gibi olacak. Ufak bir ekleme yapmamız yeterli;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
HttpWebRequest istek = (HttpWebRequest)WebRequest.Create("http://www.internethaber.com/yok-baskani-ozcanin-ayipladigi-olay-298031h.htm");
HttpWebResponse cevap = (HttpWebResponse)istek.GetResponse();
Encoding cevapkodlama = Encoding.GetEncoding(cevap.CharacterSet);
StreamReader okuyucu = new StreamReader(cevap.GetResponseStream(), cevapkodlama);
string html = okuyucu.ReadToEnd();
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
HtmlNodeCollection col = doc.DocumentNode.SelectNodes("//link[@rel='image_src']");
foreach ( HtmlNode items in col)
{
//Response.Write(items.InnerHtml);
HtmlAttribute att = items.Attributes["href"];
Response.Write(att.Value);
}
|
Burada İnternethaber’de yer alan bir haberin resim adresini çektik. Resmin link yapısı aşağıdaki gibi;
Kodlamamız sonucunda botun çektiği değer;
Son kodlamadaki olay,
rel değeri
image_src olan
link tagının
href
değerini çektik. Asp.NET ile bot yazma diğer bir deyişle HTML Parse
basit olarak bu kadar. Başka bir makalede görüşmek dileğiyle.
Kaynak dosyayı indirmek için tıklayın
System.NullReferenceException: 'Nesne başvurusu bir nesnenin örneğine ayarlanmadı.'
YanıtlaSilhatası alıyorum çoğu adreste