web crawling etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
web crawling etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

3 Temmuz 2015 Cuma

Nokogiri ile HTML/XML Dökümanlarını Parsing İşlemi

Bir önceki yazımda bir web sitesini Request ve Respond işlemlerinin nasıl yapıldığından bahsetmiştim. Bu işlemlerin ardından o web sitesinde istediğimiz bir kısmı Parse etme işleminden bahsedicem bu yazımda. 

Nokogiri: Nokogiri bir HTML, XML, SAX ve Okuyucu Parserıdır. Ruby'nin Gem listinin içinde yer alır. Dökümanların çekimi sırasında CSS ve XPath ayırıcılarından yardım alır.

HTML: Web sayfalarını oluşturmak için kullanılan standart metin işaretleme dilidir.

XML: Hem insanlar hem bilgi işlem sistemleri tarafından kolayca okunabilecek dökümanlar oluşturmaya yarayan bir işaretleme dilidir.

SAX: XML dosyalarını olay tabanlı, sözcüksel işlemedir. Dosya içerisindeki her düğüm bir geri-besleme fonksiyonu aracılığı ile istemci koda yansıtılır.

CSS: HTML'e ek olarak metin ve format biçimlendirme alanında fazladan olanaklar sunan bir Web teknolojisidir.

XPath: XML dökümanındaki bir bilgiyi bulmak için kullanılan bir dildir. XML dökümanı içindeki elemanları ve onlara ait özellikleri incelemeye yarar.

Nokogiri Kurulumu:

Bu komutu terminale yazdığımızda nokogiri eğer yüklü değilse yüklemiş oluruz.



Kullanımı için gerekli 'require' işlemleri:

Kodun başına mutlaka nokogiri ve open-uri gem'lerini require etmemiz gerekir.





HTML dökümanını parse etme:






Bu komut ile verilen linkteki entry'i fetch etmiş oluyoruz. Sonraki adımda da bu entry içindeki yorumlardan istediğimiz birisini parse edeceğiz.
Parse etmeyi istediğimiz yorumun içinden bir kelimeyi seçip sağ tıklayıp "Öğeyi Denetle" deriz.

Burada işaretli kısımdaki id içeriğini altta gösterilen kod kısmında parametre olarak kullanırız ve o yorumun tamamını parse etmiş oluruz.






Bu kodun çıktısı olarakta artık o yorumu parse etmiş oluruz.









Bu işlemi bir döngü içinde başlık kısmına denk gelen id numarasından başlanarak arttıra arttıra giderek cevap alabildiğimiz entryleri parse etmemiz mümkündür. Ben bu işlemi CSS kullanarak yaptım bunun XPath ile yapılması da mümkündür tabiki. Fakat o kısımda pek bir bilgim olmadığından CSS'i tercih ettim.
Yine bu olayı ben HTML kullanarak yaptım bunun XML kullanarak bir dosyadan parse etmekte mümkündür. Aşağıda sizlere onun kodunu paylaşıyorum.







Bazı Parse Ayarları:


  • NOBLANKS: Boş nodeları siler
  • NOENT: Entitilerin yerine geçer
  • NOERROR: Hata raporlarını ortadan kaldırır.
  • STRICT: Kusurlu dökümanların parse edilidiği zaman bir hata yükseltir
  • NONET: Hiç internet bağlantısı olmadığında parse etme işlemini engeller.
Yukarıda ayarların kodda nasıl kullanıldığına bakacak olursak;







Bu yazımın da sonuna gelmiş bulunuyoruz okuyup vakit ayırdığınız için teşekkür ederim. Umarım birazcıkda olsa ilgilenenlere faydalı olmuştur. Sonraki yazılarımda görüşmek üzere :) 

30 Haziran 2015 Salı

class Net::HTTP

HTTP Client API For Ruby

Ruby ile bir web sitesini crawl etmek istediğimde iki işlemi yapmak zorunda olduğumu öğrendim. Bunlar Request ve Response işlemleri. Bu yazımda baştan adım adım kod örnekleriyle açıklamalarda bulunacağım. Öncelikle bazı tanımların üstünde durmak istiyorum :)

HTTPS(Secure Hyper Text Transfer Protocol): HTTP'nin güvenli ağ protokolü ile birleştirilmiş halidir. Klasik HTTP protokolüne SSL protokolünün eklenmesiyle oluşturulur. İnternette sunucular ve son kullanıcılar arasında bilgilerin başkaları tarafından okunamayacak şekilde aktarılmasını hedefler.

HTTP(Hyper Text Transfer Protocol): İnternette sunucular ve son kullanıcılar arasında bilgilerin aktarılmasını hedefler. Uygulama katmanında yer alır.

URI(Uniform Resource Identifier): Web üzerinde belli bir kaynağa ulaşmak için kullanılan belli bir formata sahip karakter dizisidir.

URL(Uniform Resource Locator): Teknik söylem ve yazım kullanımlarında URI yerine kullanılır.

Web Crawling: Web sitelerini sıralı bir şekilde gezinerek bütün linklerini ya da  bizim belirlediğimiz sayıda linklerini elde etmektir.

Bütün örnek kodların başına NET::HTTP yüklenmiş varsayılır:






GET etme işleminde veriyi sadece request ederiz kaydetme yoktur.
POST işleminde ise gönderilen veriyi istersek veritabanına kaydedebiliriz.

GET etme işlemi yalnız başına, URI yardımıyla veya dinamik parametrelerle birlikte yapılır:

GET:





GET by URI:





GET with Dynamic Parameters:









NET::HTTP kullanımı:








start: hızlı bir şekilde bir tane HTTP server için bir bağlantı oluşturur.
new: eğer kendi kendine kapanmayan bir bağlantılı çoklu HTTP kullanmak istersek.
finish: bağlantıyı elle kapamak için.

Dataların Response Edilişi:

















Yönlendirmelerin Takibi:
















Headerların Set Edilişi:














Akış Response Bodyleri:















HTTPS ve SSL kullanımı:











Proxyler:







Net::HTTP http_proxy den otomatik olarak bir proxy oluşturur.

Bir Web Crawler yazma maceramın ilk adımı olan bu işlemleri sizinle paylaşmak istedim umarım yararlı olmuştur ilgilenenlere. Diğer paylaşımlarımda görüşmek üzere teşekkür ederim :)