Php ile web kazıma nedir?
Php ile web kazıma
Günümüz çağında verilerle çalışmak en önemli ve hayati becerilerden biri haline geldi. 3. nesil webi destekleyen siteler, kullanıcıların yolunu takip ederek ve web üzerindeki aktivitelerinden veri toplayarak her kişiye özel teklifler sunmaktadır. Özellikle dijital alanda işletmelerin pazara girmeden veya yeni ürünler geliştirmeden önce pazar araştırması yapması gerekiyor. Php ile web kazıma konusunda bizi takip edin .
Tüm bu durumlar, çeşitli web sayfalarından veri çıkarmaya yönelik güçlü bir ihtiyacın varlığını göstermektedir. Bu çalışma bireysel olarak ve kopyala-yapıştır yöntemiyle yapılırsa çok zaman kaybı olur ve optimal sonuç elde edilmez. Web scraping ile farklı sitelerden veri çıkarmak bir otomasyon olarak tanımlanabilir ve bilgi toplamaya zaman harcamak yerine bunları analiz etmeye ve kullanmaya odaklanabilirsiniz.
Web kazıma neden günün ihtiyacını karşılıyor?
Bir işletmenin yeni bir ürün veya hizmet piyasaya süreceğini varsayalım. Atılacak ilk adım rakiplerden (o ürün veya hizmeti halihazırda sunanlardan) bilgi toplamaktır. Ayrıca o ürün veya hizmetin sunulduğu sayfalardaki kullanıcıların görüşlerini incelemek, kuruluşun müşterilerin günlük ihtiyaçlarını bilmesine ve onların memnuniyetine odaklanmasına yardımcı olur. İnternet dünyasının genişliği ve bazı ürünler (örneğin monitörler veya akıllı telefonlar) için binlerce sayfanın varlığı göz önüne alındığında, bu sayfaların her birini kontrol etmek, herhangi bir şirketin saatlerce insan kaynağını boşa harcamakla eşdeğerdir.
Öte yandan rakipler bilgilerini herkesin kolayca erişebileceği hale getirmiyor. Bu bilgiye en uygun ve etkili erişim için mevcut tek çözüm web kazıma olacaktır . Bu çalışma artık yaygın ve küresel olarak kullanılmaktadır.
Çevrimiçi işletmelerin ve yeni girişimlerin ekosisteminde, web kazımanın avantajlarından yararlanmamak, verilerle çalışma konusundaki yoğun rekabette geride kalmakla eşdeğerdir. Web kazıma, belirli bir konu hakkında zengin bilgi toplamanıza ve enerjinizi toplamak yerine onu analiz etmeye odaklamanıza yardımcı olur.
Web kazıma nedir?
Bu olguyu tanımlamak için öncelikle gerçek anlamını bilmek daha iyidir. Kazıma, kazıma anlamına gelir. Web Scraping, “web sayfasındaki bilgilerin bir kısmının kazınması” veya “verinin bir kısmının kaldırılması amacıyla kazınması” ile eşdeğerdir. Her durumda web sayfalarındaki verilerin çıkarılması anlamına gelen bir kavramla karşı karşıyayız. Aşağıda web kazıma türlerini öğreneceğiz :
- Kılavuz: Bir öğrencinin basit bir sınıf araştırması için kullanacağı yöntemin aynısı. Sıradan insanlar arasında en popüler web kazıma yöntemi bu yöntemdir.
- DOM Ayrıştırma: Bu, tarayıcılar aracılığıyla herkesin kullanımına açıktır. Herkes, Belge Nesne Modeli’ni veya DOM ağacını kullanarak web sayfalarını ayrıştırabilir ve içerdiği bilgileri tamamen çıkarabilir. DOM’un görevi bir HTML veya XML dosyasının yapısını ifade etmektir. DOM, PHP’de eklenti olarak mevcuttur.
- Düzenli ifadeler: “normal ifade”, web sayfalarında aradığımız bir dizeyi ifade eder. Tıpkı arama motorlarının çalışma şekli gibi, web üzerinde veya belirli bir sitede yazılı bir ifadeyi ararlar. Düzenli İfadeler tekniği basit ve çok kullanışlı bir tekniktir.
- Dikey toplama, HTML ayrıştırma ve anlamsal açıklama tespiti gibi başka teknikler de vardır, ancak PHP’de ilk üçü en çok kullanılacaktır.
Dikkat edilmesi gereken noktalar
- Bazı siteler, bilgilerinin kaldırılmasıyla başa çıkmak için önlemler geliştirmiştir; örneğin, bilgi çıkarmaya çalıştıktan sonra IP adresleriniz bloke edilebilir.
- Programınız sonsuz bir döngüye girebilir ve sisteminiz çökebilir.
- Kod optimizasyonu çok önemlidir.
Php ile web kazıma
Php son yılların en yaygın kullanılan ve popüler programlama dillerinden biridir. Yüksek hız, farklı özellikler ve hızlı öğrenme bu popülerliğin en önemli nedenleridir. Web kazıma, farklı alanlarda ve dillerde kod yazarak yapılabilir, ancak bunu php ile yapmak çoğu web ve mobil programcının tercihidir. Php’de web komut dosyası oluşturma iki kitaplık kullanılarak yapılır:
Basit HTML DOM
DOM ağacını kullanarak web sayfalarını ayrıştıran bir ayrıştırıcı. Bu ayrıştırıcı PHP5+ ile uyumludur ve kullanım kolaylığının yanı sıra bozuk dosyaları (Geçersiz HTML) ayrıştırmak için de kullanılır. Bu kütüphaneyi kullanmak için gereken kodlama miktarı da oldukça azdır ve bu nedenle oldukça popülerdir.
SimpleXMLElement
Dosyaların okunabilmesi için belirli bir formatta olması gerekir. Bu kütüphanenin görevi XML dosyasını bir veri yapısına dönüştürmektir. Bu kütüphane aynı zamanda PHP5+ ile de uyumludur.
PHP’de web kazımanın önkoşulları
- PHP 5+ veya 7+
- Temel PHP ve HTML bilgisi
- HTML DOM ayrıştırıcısı
PHP ile web kazıma yapmak zor bir iş değildir ancak yine de biraz PHP bilgisi gerektirecektir. Öte yandan HTML etiketlerine de aşina olmalısınız, aksi takdirde bilgiyi analiz etme ve kullanma konusunda sorunlarla karşılaşacaksınız.
Gerekli HTML bilgisi
- Web sayfalarını tasarlamak için kullanılan bir dildir
- Web sayfalarını bunları kullanarak işaretlemeye ve tanımlamaya dayanır.
- Web sayfalarını oluşturan bir dizi öğeye sahiptir.
- Bu öğeler bir dizi etiketle tanımlanır
- En ünlü etiketler “Başlık” ve “Gövde”dir.
- Bu etiketler kullanıcıya gösterilmez ve yalnızca sayfanın alt katmanına girilerek erişilebilir.
PHP’de web kazıma adımları
Sıfır adım, ayrıştırıcının kurulumu:
Sayfaların verilerini ayıklamak için ayrıştırmanın HTML DOM Ayrıştırıcısı tarafından yapıldığını söylemiştik. Herhangi bir şey yapmadan önce bu ayrıştırıcıyı sisteminize kurmalısınız (indirmek için bu bağlantıyı kullanabilirsiniz). İndirdikten sonra “Simple_Dom” adlı bir klasöre ulaşmak için zip dosyasını çıkartmanız yeterlidir.
Birinci adım: Dosyayı oluşturun ve kitaplığı kullanın
Bu aşamada Scraper.php adında bir dosya oluşturup içine aşağıdaki komutu yazmak gerekiyor:
<?php require_once 'simple_html_dom.php';
Bu sayede istenilen kütüphane devreye girmektedir. Daha sonra “Simple_dom” adında bir klasör oluşturun ve Scraper.php dosyasını bu klasöre kopyalayın.
İkinci adım: İstenilen sayfanın tanıtılması
Şimdi PHP’ye ayrıştırılacak sayfayı tanıtmamız gerekiyor. Bunun için aşağıdaki komutları yazın ve URL yerine istediğiniz sayfanın adresini yazın.
<?php require_once 'simple_html_dom.php'; // siteden html içeriğini alıyoruz. $dom = file_get_html('URL', false);
Gördüğünüz gibi hedef sayfayı ayrıştırmak için “Simple_HTML_DOM” çağrıldı. Bu, söz konusu sayfadan birkaç satırlık bilgi alır. Ancak genellikle sayfanın yalnızca bir kısmına (örneğin yorumlar bölümü) ihtiyaç duyulur. Bu nedenle başka satırlar yazmak gerekir.
Üçüncü adım: İstediğiniz bölümü çıkarmak için kodu yazın
HTML ve CSS bilginizin işe yarayacağı yer burasıdır. Öncelikle sayfanın kodunu görmeniz gerekiyor. Bunun için tarayıcıda istediğiniz sayfayı açıp bir kısmına sağ tıklamanız yeterlidir. Daha sonra, Chrome kullanıyorsanız Sayfa Kaynağını Görüntüle’ye, Mozilla kullanıyorsanız HTML kodunu görüntülemek için Öğeleri Denetle’ye tıklayın.
Web sayfalarının tasarlanmasında CSS sınıfları kullanılır. Aslında sayfanın her bir bölümü CSS sınıf adı ve kimlik numarasıyla tanımlanabilir. O bölüme ait bilgileri çıkarmak için bu özellikler üzerinden php’ye tanıtmanız yeterlidir. Örneğin imdb sitesinde incelemeler bölümünü çıkarmak için öncelikle sayfa koduna bakıyoruz ve bu bölümü inceleme-konteyner sınıfı altında buluyoruz. Bu bölümün tüm alt kümeleri (yıldız sayısı, başlık vb.) bu sınıfın adı altındadır. Bu bölümdeki verileri çıkarmak için php’ye aşağıdaki kodu girmeniz yeterlidir:
//tüm kullanıcıların yorumlarını bir dizide topla $cevap = dizi(); if(!empty($dom)) { $divClass = $başlık = ”; $i = 0; foreach($dom->find(“.review-container”) as $divClass) { //başlık foreach($divClass->find(“.title”) as $title ) { $cevap[$i]['başlık'] = $başlık->plaintext; } //ipl-derecelendirme çubuğu foreach($divClass->find(“.ipl-ratings-bar”) as $ipl_ratings_bar ) { $cevap[$i]['oran'] = trim($ipl_ratings_bar->plaintext); } //içerik foreach($divClass->find('div[class=text show-more__control]') as $desc) { $metin = html_entity_decode($desc->plaintext); $metin = preg_replace('/\'/', “'”, $metin); $cevap[$i]['content'] = html_entity_decode($text); } $i++; } } print_r($cevap); çıkış;
Tüm bilgiler sonunda $answer’da bir dizi olarak saklanır. Bu diziye basılı denir ve bilgileri aşağıda kullanılır.
Dördüncü adım: Elde edilen verileri bir XML dosyasına kaydedin
Bu adımda, bir önceki adımda elde ettiğimiz diziyi bir XML elemanına dönüştürmeliyiz. Bu dönüşümle sonucu bir XML dosyasına kaydedebilir ve bilgileri istediğiniz gibi kullanabilirsiniz. Daha önce bahsettiğimiz SimpleXMLElement kütüphanesinin kullanışlı olduğu yer burasıdır. Bunun için aynı IMDB örneğinde kod şu şekilde olacaktır:
//diziyi xml'e dönüştürmek için işlev tanımı function array_to_xml($dizi, &$xml_user_info) { foreach($array as $anahtar => $değer) { if(is_array($value)) { $subnode = $xml_user_info->addChild(“İnceleme$anahtarı”); foreach ($değer as $k=>$v) { $xml_user_info->addChild(“$k”, $v); } } başka { $xml_user_info->addChild(“$anahtar”,htmlspecialchars(“$değer”)); } } return $xml_user_info->asXML(); } // SimpleXMLElement nesnesi yaratılıyor $xml_user_info = new SimpleXMLElement(“<?xml version=\”1.0\”?><root></root>”); //diziyi xml'e dönüştürmek ve tüm xml içeriğini etiketle birlikte döndürmek için işlev çağrısı $xmlContent = array_to_xml($cevap, $xml_user_info);
Bu kod parçasında öncelikle SimpleXMLElement sınıfına ait bir nesne tanımlayıp ardından onu “Array_to_XML” isimli fonksiyonun içine yerleştiriyoruz. Bilgiler “$xmlContent” değişkeninde bir dizi olarak saklanır.
Daha sonra aşağıdaki komutları içeren bir XML dosyası oluşturup sonuçları bu dosyaya kaydediyoruz:
// Bir xml dosyası oluştur $my_file = 'AvengersMovieReview.xml'; $handle = fopen($my_file, 'w') or die('Dosya açılamıyor: '.$my_file); //xml oluşturmaya dayalı başarı ve hata mesajı if(fwrite($tanımlayıcı, $xmlContent)) { echo 'XML dosyası başarıyla oluşturuldu.'; } başka{ echo 'XML dosyası oluşturma hatası.'; } ?>
Son adım: otomasyon oluşturmak
İncelenen örnek yalnızca belirli bir sayfadan alınmıştır ve incelemenin amacı kodlama prosedürüne aşinalık kazandırmaktır. Gerçek projelerde, çok sayıda web sayfasında otomatik olarak web kazıma işlemini otomatik olarak gerçekleştirmeniz gerekecektir. Bunun için farklı yöntemler vardır ve bunların arasından seçim yapmak programcının iş yüküne, deneyimine ve tercihlerine bağlıdır.
Halkaları kullanmak mevcut en basit yollardan biridir ancak işlem gücü ve işlem hızı açısından güçlü bir sistem gerektirir. Linux’un bu iş için Windows’a göre çok daha uygun bir seçenek olacağını, paralel ve arka plan işlemleriyle daha uyumlu olduğunu söylemek gerekir.
Çözüm
Günümüz dünyası, temeli bilgi olan bir bina gibidir. Böyle bir dünyada herhangi bir hamle yapmak ve herhangi bir fikri hayata geçirmek için bilgiyi çıkarmamız ve en iyi şekilde kullanmamız gerekecek. Bu nedenle web kazıma günümüz organizasyonlarının, özellikle de İnternet alanında aktif olanların ayrılmaz bir parçası haline gelmiştir. Bu farklı yöntem ve dillerle yapılır. Php, programcıların web kazıma için kullandığı dillerden biridir.
Bu yazımızda php ile web scraping’in ne olduğunu ve php dili ile nasıl yapılacağını anlatmaya odaklandık . Bu alandaki en önemli prensip, optimum kod yürütme ve otomatik komut dosyası yürütmedir