{"id":45278,"date":"2026-10-19T21:15:02","date_gmt":"2026-10-19T18:15:02","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/"},"modified":"2026-10-19T21:15:47","modified_gmt":"2026-10-19T18:15:47","slug":"belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/","title":{"rendered":"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131"},"content":{"rendered":"<h2>Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda, i\u015fletmeler ve bireyler, internetin ve \u00e7e\u015fitli dijital belgelerin sundu\u011fu muazzam veri okyanusunda y\u00fczmektedir. Peki, bu devasa veri y\u0131\u011f\u0131n\u0131ndan anlaml\u0131, i\u015flenebilir ve de\u011ferli bilgiyi nas\u0131l \u00e7\u0131karabiliriz? \u0130\u015fte tam da bu noktada belge kaz\u0131ma (document scraping) ve ayr\u0131\u015ft\u0131rma (parsing) \u00e7\u00f6z\u00fcmleri devreye giriyor. Bu makale, web sayfalar\u0131ndan PDF&#8217;lere, Word belgelerinden e-postalara kadar farkl\u0131 kaynaklardan veriyi nas\u0131l toplayaca\u011f\u0131n\u0131z\u0131, temizleyece\u011finizi ve anlaml\u0131 hale getirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Amac\u0131m\u0131z, size bu karma\u015f\u0131k gibi g\u00f6r\u00fcnen s\u00fcreci basitle\u015ftirerek, kendi veri projelerinizi ba\u015flatman\u0131z i\u00e7in gerekli bilgi ve ara\u00e7lar\u0131 sunmakt\u0131r.<\/p>\n<h2>Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma Nedir? Temel Kavramlara Derin Bak\u0131\u015f<\/h2>\n<p>Dijital d\u00fcnyada her ge\u00e7en g\u00fcn daha fazla veri \u00fcretiliyor ve bu verilerin b\u00fcy\u00fck bir k\u0131sm\u0131 yap\u0131sal olmayan veya yar\u0131 yap\u0131sal formatlarda kar\u015f\u0131m\u0131za \u00e7\u0131k\u0131yor. Bu durum, bilgiye eri\u015fimi ve bu bilgiyi analiz etmeyi zorla\u015ft\u0131rabiliyor. \u0130\u015fte bu zorlu\u011fun \u00fcstesinden gelmek i\u00e7in belge kaz\u0131ma ve ayr\u0131\u015ft\u0131rma teknikleri geli\u015ftirilmi\u015ftir. Peki, bu iki kavram tam olarak ne anlama geliyor ve neden bu kadar \u00f6nemliler?<\/p>\n<h3>Belge Kaz\u0131ma (Document Scraping) Nedir?<\/h3>\n<p>Belge kaz\u0131ma, genellikle &#8220;veri kaz\u0131ma&#8221; veya &#8220;web kaz\u0131ma&#8221; (web scraping) olarak da bilinen, internet siteleri veya dijital belgeler \u00fczerindeki insan taraf\u0131ndan okunabilir veriyi otomatik olarak toplama i\u015flemidir. Temel olarak, bir web sitesini veya belgeyi bir insan gibi ziyaret eder, ancak bunu programatik olarak, \u00e7ok daha h\u0131zl\u0131 ve b\u00fcy\u00fck \u00f6l\u00e7ekte yapar. Kaz\u0131ma i\u015flemi, HTML kodlar\u0131n\u0131, metinleri, resim ba\u011flant\u0131lar\u0131n\u0131, tablolar\u0131 ve di\u011fer t\u00fcm g\u00f6rsel veya metinsel i\u00e7eri\u011fi hedefleyebilir. \u00d6rne\u011fin, bir e-ticaret sitesinden \u00fcr\u00fcn fiyatlar\u0131n\u0131, bir haber sitesinden makale ba\u015fl\u0131klar\u0131n\u0131 veya bir emlak sitesinden ilan detaylar\u0131n\u0131 toplamak, belge kaz\u0131ma faaliyetlerine \u00f6rnek te\u015fkil eder.<\/p>\n<p>Kaz\u0131ma, genellikle bir web taray\u0131c\u0131s\u0131n\u0131n veya \u00f6zel bir yaz\u0131l\u0131m\u0131n (crawler\/spider) web sayfalar\u0131n\u0131 gezmesi ve belirli kriterlere uyan verileri \u00e7ekmesiyle ger\u00e7ekle\u015fir. Bu s\u00fcre\u00e7, manuel olarak saatler s\u00fcrecek bir g\u00f6revi dakikalara indirebilir ve b\u00fcy\u00fck veri setlerinin olu\u015fturulmas\u0131na olanak tan\u0131r. Ancak, kaz\u0131ma i\u015flemi sadece web sayfalar\u0131yla s\u0131n\u0131rl\u0131 de\u011fildir; PDF dosyalar\u0131, Word belgeleri, Excel tablolar\u0131 ve hatta e-postalar gibi di\u011fer dijital belge t\u00fcrlerinden de veri \u00e7ekilebilir. Bu t\u00fcr belgelerden veri \u00e7ekme s\u00fcreci de geni\u015f anlamda belge kaz\u0131ma olarak adland\u0131r\u0131labilir.<\/p>\n<h3>Belge Ayr\u0131\u015ft\u0131rma (Document Parsing) Nedir?<\/h3>\n<p>Ayr\u0131\u015ft\u0131rma, kaz\u0131ma i\u015flemiyle elde edilen ham veriyi anlaml\u0131, yap\u0131sal ve i\u015flenebilir bir formata d\u00f6n\u00fc\u015ft\u00fcrme s\u00fcrecidir. Kaz\u0131ma genellikle ham HTML kodu veya metin y\u0131\u011f\u0131nlar\u0131 \u00fcretirken, ayr\u0131\u015ft\u0131rma bu ham verinin i\u00e7indeki belirli bilgi par\u00e7ac\u0131klar\u0131n\u0131 bulur, ay\u0131klar ve d\u00fczenler. \u00d6rne\u011fin, bir web sayfas\u0131ndan kaz\u0131nan HTML kodundan sadece \u00fcr\u00fcn ad\u0131n\u0131, fiyat\u0131n\u0131 ve a\u00e7\u0131klamas\u0131n\u0131 ay\u0131klamak bir ayr\u0131\u015ft\u0131rma i\u015flemidir. Ayr\u0131\u015ft\u0131rma, genellikle belirli kurallar, kal\u0131plar (patternler) veya algoritmalar kullan\u0131larak yap\u0131l\u0131r. Bu kurallar, verinin nerede ba\u015flad\u0131\u011f\u0131n\u0131, nerede bitti\u011fini ve hangi tipte oldu\u011funu tan\u0131mlar.<\/p>\n<p>Ayr\u0131\u015ft\u0131rma, genellikle d\u00fczenli ifadeler (regular expressions), CSS se\u00e7iciler (CSS selectors) veya XPath gibi tekniklerle ger\u00e7ekle\u015ftirilir. Bu teknikler sayesinde, karma\u015f\u0131k bir metin veya kod blo\u011funun i\u00e7inden istenilen veri par\u00e7ac\u0131klar\u0131 hassas bir \u015fekilde hedeflenebilir. Ayr\u0131\u015ft\u0131rma, verinin kalitesini art\u0131rmak ve onu daha sonraki analizler veya veritaban\u0131 depolama i\u00e7in haz\u0131r hale getirmek a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Kaz\u0131ma ve ayr\u0131\u015ft\u0131rma, genellikle birlikte kullan\u0131lan iki tamamlay\u0131c\u0131 s\u00fcre\u00e7tir. Ham veriyi toplamak (kaz\u0131ma) ve bu ham veriyi i\u015flenebilir bilgiye d\u00f6n\u00fc\u015ft\u00fcrmek (ayr\u0131\u015ft\u0131rma) birbirini takip eden ad\u0131mlard\u0131r.<\/p>\n<h3>Neden Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma Bu Kadar \u00d6nemli?<\/h3>\n<p>Bu teknikler, g\u00fcn\u00fcm\u00fcz i\u015f d\u00fcnyas\u0131nda ve ara\u015ft\u0131rma alanlar\u0131nda bir\u00e7ok kritik ihtiyaca cevap vermektedir:<\/p>\n<ul>\n<li><strong>\u0130\u015f Zekas\u0131 ve Rekabet Analizi:<\/strong> Rakiplerin fiyatland\u0131rma stratejilerini, \u00fcr\u00fcn yelpazesini veya m\u00fc\u015fteri yorumlar\u0131n\u0131 izlemek i\u00e7in kullan\u0131labilir. Bu, i\u015fletmelerin piyasadaki konumlar\u0131n\u0131 daha iyi anlamalar\u0131na ve stratejik kararlar almalar\u0131na yard\u0131mc\u0131 olur.<\/li>\n<li><strong>Pazar Ara\u015ft\u0131rmas\u0131:<\/strong> Trendleri, t\u00fcketici davran\u0131\u015flar\u0131n\u0131 ve ni\u015f pazarlar\u0131 belirlemek i\u00e7in b\u00fcy\u00fck veri setleri toplanabilir. \u00d6rne\u011fin, sosyal medya platformlar\u0131ndan toplanan verilerle kamuoyu analizi yap\u0131labilir.<\/li>\n<li><strong>Otomasyon ve Veri Entegrasyonu:<\/strong> Manuel veri giri\u015fi gerektiren i\u015f s\u00fcre\u00e7lerini otomatikle\u015ftirebilir. Farkl\u0131 sistemlerden gelen verileri tek bir yerde toplayarak entegre bir g\u00f6r\u00fcn\u00fcm sa\u011flayabilir.<\/li>\n<li><strong>\u0130\u00e7erik Toplama ve Agregasyon:<\/strong> Haber siteleri, bloglar veya akademik yay\u0131nlar gibi \u00e7e\u015fitli kaynaklardan i\u00e7erik toplayarak ki\u015fiselle\u015ftirilmi\u015f haber ak\u0131\u015flar\u0131 veya ara\u015ft\u0131rma veri tabanlar\u0131 olu\u015fturulabilir.<\/li>\n<li><strong>Ara\u015ft\u0131rma ve Geli\u015ftirme:<\/strong> Bilimsel makalelerden, patent veri tabanlar\u0131ndan veya kamuya a\u00e7\u0131k veri setlerinden bilgi toplayarak yeni \u00fcr\u00fcn veya hizmet geli\u015ftirme s\u00fcre\u00e7lerine katk\u0131 sa\u011flanabilir.<\/li>\n<\/ul>\n<h3>Etik ve Yasal Boyutlar: Nelere Dikkat Etmeliyiz?<\/h3>\n<p>Belge kaz\u0131ma ve ayr\u0131\u015ft\u0131rma g\u00fc\u00e7l\u00fc ara\u00e7lar olsa da, etik ve yasal s\u0131n\u0131rlamalara dikkat etmek hayati \u00f6nem ta\u015f\u0131r. Her \u015feyden \u00f6nce, bir web sitesinden veri kaz\u0131madan \u00f6nce sitenin <code>robots.txt<\/code> dosyas\u0131n\u0131 kontrol etmek gerekir. Bu dosya, site sahibinin hangi sayfalar\u0131n kaz\u0131nmas\u0131na izin verildi\u011fini veya hangi sayfalar\u0131n kaz\u0131nmas\u0131n\u0131n yasakland\u0131\u011f\u0131n\u0131 belirtir. Bu kurallara uymak, hem yasal sorunlardan ka\u00e7\u0131nman\u0131z\u0131 hem de site sahibine sayg\u0131 g\u00f6stermenizi sa\u011flar. Ayr\u0131ca, kaz\u0131nan verinin telif haklar\u0131, ki\u015fisel verilerin korunmas\u0131 (KVKK\/GDPR) ve hizmet \u015fartlar\u0131 gibi konular da g\u00f6z \u00f6n\u00fcnde bulundurulmal\u0131d\u0131r. \u00d6zellikle ki\u015fisel veri i\u00e7eren bilgileri toplarken ve i\u015flerken \u00e7ok dikkatli olunmal\u0131, ilgili yasal d\u00fczenlemelere harfiyen uyulmal\u0131d\u0131r. A\u015f\u0131r\u0131 y\u00fckleme yaparak sitelere zarar vermemek ve IP adresinizin engellenmemesi i\u00e7in nazik (polite) kaz\u0131ma teknikleri kullanmak da \u00f6nemlidir (\u00f6rne\u011fin, istekler aras\u0131nda gecikmeler koymak).<\/p>\n<h2>Web Sayfalar\u0131ndan Veri Kaz\u0131ma: Pratik Ad\u0131mlar ve Ara\u00e7lar<\/h2>\n<p>Web sayfalar\u0131ndan veri kaz\u0131ma, belge kaz\u0131ma denince akla ilk gelen uygulamalardan biridir. \u0130nternet, devasa bir bilgi kayna\u011f\u0131d\u0131r ve bu bilgiyi yap\u0131land\u0131r\u0131lm\u0131\u015f bir \u015fekilde elde etmek, bir\u00e7ok proje i\u00e7in temel bir ad\u0131md\u0131r. Bu b\u00f6l\u00fcmde, web sayfalar\u0131ndan veri kaz\u0131man\u0131n temel prensiplerini, kullan\u0131lan ara\u00e7lar\u0131 ve ad\u0131m ad\u0131m bir \u00f6rnek \u00fczerinden nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<h3>HTML\/XML Yap\u0131s\u0131 ve DOM&#8217;u Anlamak<\/h3>\n<p>Bir web sayfas\u0131ndan veri kaz\u0131mak i\u00e7in \u00f6ncelikle o sayfan\u0131n temel yap\u0131s\u0131n\u0131 anlamak gerekir. Web sayfalar\u0131 genellikle HTML (HyperText Markup Language) kullan\u0131larak olu\u015fturulur. HTML, i\u00e7eri\u011fi (metin, resim, ba\u011flant\u0131 vb.) yap\u0131land\u0131ran etiketlerden olu\u015fur. \u00d6rne\u011fin, bir ba\u015fl\u0131k <code>&lt;h1&gt;<\/code> etiketiyle, bir paragraf <code>&lt;p&gt;<\/code> etiketiyle, bir ba\u011flant\u0131 ise <code>&lt;a&gt;<\/code> etiketiyle belirtilir. XML (eXtensible Markup Language) ise daha \u00e7ok veri depolama ve ta\u015f\u0131ma i\u00e7in kullan\u0131lan, esnek bir i\u015faretleme dilidir.<\/p>\n<p>Bir web taray\u0131c\u0131s\u0131, HTML kodunu okur ve onu bir Belge Nesne Modeli (DOM &#8211; Document Object Model) olarak temsil eder. DOM, bir web sayfas\u0131n\u0131n mant\u0131ksal yap\u0131s\u0131n\u0131 ve i\u00e7eri\u011fini g\u00f6steren a\u011fa\u00e7 benzeri bir yap\u0131d\u0131r. Her HTML etiketi (element) bu a\u011fa\u00e7ta bir d\u00fc\u011f\u00fcm (node) olarak temsil edilir. Veri kaz\u0131ma s\u0131ras\u0131nda, bu DOM yap\u0131s\u0131 \u00fczerinde gezinerek istedi\u011fimiz elementleri bulmaya \u00e7al\u0131\u015f\u0131r\u0131z. Taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131n\u0131 (genellikle F12 tu\u015fuyla a\u00e7\u0131l\u0131r) kullanarak bir web sayfas\u0131n\u0131n HTML yap\u0131s\u0131n\u0131 ve DOM&#8217;unu kolayca inceleyebilirsiniz. Bu ara\u00e7lar, belirli bir elementin hangi etiketlere, s\u0131n\u0131flara (class) veya ID&#8217;lere sahip oldu\u011funu g\u00f6rmenizi sa\u011flar, bu da kaz\u0131ma i\u00e7in hedefleri belirlemede \u00e7ok yard\u0131mc\u0131 olur.<\/p>\n<h3>Pop\u00fcler Ara\u00e7lar ve K\u00fct\u00fcphaneler<\/h3>\n<p>Web kaz\u0131ma i\u00e7in bir\u00e7ok programlama dilinde zengin k\u00fct\u00fcphaneler ve ara\u00e7lar bulunmaktad\u0131r. En pop\u00fcler olanlardan baz\u0131lar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Python:<\/strong>\n<ul>\n<li><strong>Beautiful Soup:<\/strong> HTML ve XML belgelerinden veri ay\u0131klamak i\u00e7in pop\u00fcler ve kullan\u0131m\u0131 kolay bir k\u00fct\u00fcphanedir. Genellikle basit ve orta karma\u015f\u0131kl\u0131ktaki kaz\u0131ma g\u00f6revleri i\u00e7in tercih edilir.<\/li>\n<li><strong>Scrapy:<\/strong> Daha b\u00fcy\u00fck \u00f6l\u00e7ekli ve karma\u015f\u0131k web kaz\u0131ma projeleri i\u00e7in tasarlanm\u0131\u015f kapsaml\u0131 bir framework&#8217;t\u00fcr (yaz\u0131l\u0131m \u00e7er\u00e7evesi). Asenkron (asynchronous) \u00e7al\u0131\u015f\u0131r, dolay\u0131s\u0131yla \u00e7ok say\u0131da iste\u011fi verimli bir \u015fekilde y\u00f6netebilir.<\/li>\n<li><strong>Selenium:<\/strong> Taray\u0131c\u0131 otomasyonu i\u00e7in tasarlanm\u0131\u015ft\u0131r. JavaScript ile dinamik olarak y\u00fcklenen i\u00e7erikleri veya kullan\u0131c\u0131 etkile\u015fimi gerektiren (t\u0131klama, form doldurma) siteleri kaz\u0131mak i\u00e7in idealdir.<\/li>\n<li><strong>Playwright\/Puppeteer:<\/strong> JavaScript tabanl\u0131 web kaz\u0131ma ve otomasyon ara\u00e7lar\u0131d\u0131r. Selenium&#8217;a benzer \u015fekilde headless (ba\u015fs\u0131z) taray\u0131c\u0131larla \u00e7al\u0131\u015farak dinamik i\u00e7erikleri kaz\u0131may\u0131 m\u00fcmk\u00fcn k\u0131lar. Python i\u00e7in Playwright k\u00fct\u00fcphanesi de mevcuttur.<\/li>\n<\/ul>\n<\/li>\n<li><strong>JavaScript (Node.js):<\/strong>\n<ul>\n<li><strong>Cheerio:<\/strong> Beautiful Soup&#8217;a benzer \u015fekilde sunucu taraf\u0131nda h\u0131zl\u0131 HTML ayr\u0131\u015ft\u0131rma sa\u011flar.<\/li>\n<li><strong>Puppeteer\/Playwright:<\/strong> Taray\u0131c\u0131 otomasyonu i\u00e7in yayg\u0131n olarak kullan\u0131l\u0131r. Dinamik i\u00e7erik kaz\u0131mada \u00e7ok etkilidir.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Basit Bir Web Kaz\u0131ma \u00d6rne\u011fi: Python ile Beautiful Soup<\/h3>\n<p>\u015eimdi, Python ve Beautiful Soup kullanarak basit bir web sayfas\u0131ndan veri kaz\u0131ma \u00f6rne\u011fi yapal\u0131m. Diyelim ki, bir blog sayfas\u0131ndaki makale ba\u015fl\u0131klar\u0131n\u0131 ve ba\u011flant\u0131lar\u0131n\u0131 toplamak istiyoruz. \u0130lk olarak, gerekli k\u00fct\u00fcphaneleri y\u00fcklememiz gerekir:<\/p>\n<div class=\"code-container\">\n<pre><code>pip install requests beautifulsoup4<\/code><\/pre>\n<\/p><\/div>\n<p>Ard\u0131ndan, a\u015fa\u011f\u0131daki Python kodunu kullanarak i\u015flemi ger\u00e7ekle\u015ftirebiliriz:<\/p>\n<div class=\"code-container\">\n<pre><code>import requests\nfrom bs4 import BeautifulSoup\n\n# Hedef web sayfas\u0131n\u0131n URL'si\nurl = \"https:\/\/www.example.com\/blog\" # Buraya ger\u00e7ek bir blog URL'si yaz\u0131n\n\ntry:\n    # Web sayfas\u0131n\u0131 indir\n    response = requests.get(url)\n    response.raise_for_status() # HTTP hatalar\u0131n\u0131 kontrol et\n\n    # HTML i\u00e7eri\u011fini Beautiful Soup ile ayr\u0131\u015ft\u0131r\n    soup = BeautifulSoup(response.text, 'html.parser')\n\n    # Makale ba\u015fl\u0131klar\u0131n\u0131 ve ba\u011flant\u0131lar\u0131n\u0131 bul\n    # Genellikle blog ba\u015fl\u0131klar\u0131 <h2> veya <h3> etiketleri i\u00e7inde bulunur\n    # ve bir &lt;a&gt; etiketiyle ba\u011flant\u0131l\u0131d\u0131r.\n    # Bu k\u0131s\u0131m, hedef sitenin HTML yap\u0131s\u0131na g\u00f6re de\u011fi\u015fiklik g\u00f6sterecektir.\n    articles = soup.find_all('h2', class_='post-title') # \u00d6rnek bir class ad\u0131\n\n    print(f\"'{url}' adresinden bulunan makaleler:\")\n    for article in articles:\n        link_tag = article.find('a')\n        if link_tag:\n            title = link_tag.get_text(strip=True)\n            href = link_tag.get('href')\n            print(f\"- Ba\u015fl\u0131k: {title}, Ba\u011flant\u0131: {href}\")\n        else:\n            print(f\"- Ba\u015fl\u0131k: {article.get_text(strip=True)} (Ba\u011flant\u0131 bulunamad\u0131)\")\n\nexcept requests.exceptions.RequestException as e:\n    print(f\"Web sayfas\u0131na eri\u015firken bir hata olu\u015ftu: {e}\")\nexcept Exception as e:\n    print(f\"Bir hata olu\u015ftu: {e}\")\n<\/code><\/pre>\n<\/p><\/div>\n<p>Bu \u00f6rnekte, <code>requests.get(url)<\/code> ile web sayfas\u0131n\u0131n HTML i\u00e7eri\u011fini al\u0131yoruz. Ard\u0131ndan, <code>BeautifulSoup(response.text, 'html.parser')<\/code> ile bu i\u00e7eri\u011fi ayr\u0131\u015ft\u0131r\u0131labilir bir nesneye d\u00f6n\u00fc\u015ft\u00fcr\u00fcyoruz. <code>soup.find_all('h2', class_='post-title')<\/code> komutu, belirli bir HTML etiketi (<code>&lt;h2&gt;<\/code>) ve s\u0131n\u0131f (<code>post-title<\/code>) ile e\u015fle\u015fen t\u00fcm elementleri bulur. Daha sonra her bir elementin i\u00e7indeki ba\u011flant\u0131 (<code>&lt;a&gt;<\/code>) etiketini bulup ba\u015fl\u0131\u011f\u0131n\u0131 ve URL&#8217;sini \u00e7ekiyoruz. Unutmay\u0131n, <code>'h2', class_='post-title'<\/code> k\u0131sm\u0131, kaz\u0131mak istedi\u011finiz web sitesinin ger\u00e7ek HTML yap\u0131s\u0131na g\u00f6re de\u011fi\u015ftirilmelidir. Taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131n\u0131 kullanarak do\u011fru etiketleri ve s\u0131n\u0131flar\u0131 bulabilirsiniz.<\/p>\n<h3>CSS Se\u00e7iciler ve XPath Kullan\u0131m\u0131<\/h3>\n<p>Veri ayr\u0131\u015ft\u0131rma s\u0131ras\u0131nda, hedef elementleri belirlemek i\u00e7in iki g\u00fc\u00e7l\u00fc y\u00f6ntem daha vard\u0131r:<\/p>\n<ul>\n<li><strong>CSS Se\u00e7iciler (CSS Selectors):<\/strong> Web tasar\u0131m\u0131nda elementleri stilize etmek i\u00e7in kullan\u0131lan se\u00e7iciler, ayn\u0131 zamanda veri kaz\u0131mada da \u00e7ok etkilidir. \u00d6rne\u011fin, <code>div.product-card h3 a<\/code> se\u00e7icisi, <code>product-card<\/code> s\u0131n\u0131f\u0131na sahip bir <code>&lt;div&gt;<\/code> i\u00e7indeki <code>&lt;h3&gt;<\/code> etiketinin alt\u0131ndaki <code>&lt;a&gt;<\/code> etiketini hedef al\u0131r. Beautiful Soup ve di\u011fer bir\u00e7ok kaz\u0131ma k\u00fct\u00fcphanesi CSS se\u00e7icileri destekler.<\/li>\n<li><strong>XPath (XML Path Language):<\/strong> XML belgelerindeki (ve dolay\u0131s\u0131yla HTML&#8217;deki) elementleri se\u00e7mek i\u00e7in kullan\u0131lan bir sorgu dilidir. CSS se\u00e7icilere g\u00f6re daha g\u00fc\u00e7l\u00fc ve esnektir, \u00e7\u00fcnk\u00fc DOM a\u011fac\u0131nda yukar\u0131 do\u011fru (parent elementlere) gezinmeye veya metin i\u00e7eri\u011fine g\u00f6re se\u00e7im yapmaya olanak tan\u0131r. \u00d6rne\u011fin, <code>\/\/div[@class='item']\/span[contains(text(), 'Fiyat')]<\/code> ifadesi, <code>item<\/code> s\u0131n\u0131f\u0131na sahip bir <code>&lt;div&gt;<\/code> i\u00e7indeki metni &#8220;Fiyat&#8221; i\u00e7eren bir <code>&lt;span&gt;<\/code> etiketini bulur. Scrapy ve Selenium gibi k\u00fct\u00fcphaneler XPath&#8217;i yayg\u0131n olarak kullan\u0131r.<\/li>\n<\/ul>\n<h3>Dinamik \u0130\u00e7erik (JavaScript ile Y\u00fcklenen) Nas\u0131l Ele Al\u0131n\u0131r?<\/h3>\n<p>Modern web sitelerinin \u00e7o\u011fu, sayfa y\u00fcklendikten sonra JavaScript kullanarak i\u00e7eriklerini dinamik olarak olu\u015fturur. Bu t\u00fcr sitelerde sadece HTML i\u00e7eri\u011fini indirmek (<code>requests<\/code> k\u00fct\u00fcphanesi gibi) yeterli olmayabilir, \u00e7\u00fcnk\u00fc JavaScript taraf\u0131ndan olu\u015fturulan i\u00e7erik indirilen ham HTML&#8217;de bulunmayacakt\u0131r. Bu durumda, tam bir web taray\u0131c\u0131s\u0131n\u0131 sim\u00fcle eden ara\u00e7lara ihtiyac\u0131m\u0131z vard\u0131r:<\/p>\n<ul>\n<li><strong>Selenium:<\/strong> Sanal bir taray\u0131c\u0131y\u0131 (\u00f6rne\u011fin Chrome veya Firefox) kontrol ederek web sayfalar\u0131n\u0131 ziyaret eder, JavaScript&#8217;i \u00e7al\u0131\u015ft\u0131r\u0131r ve sayfa tamamen y\u00fcklendikten sonra DOM&#8217;a eri\u015fmenizi sa\u011flar. Kullan\u0131c\u0131 etkile\u015fimlerini (t\u0131klama, kayd\u0131rma) de sim\u00fcle edebilir.<\/li>\n<li><strong>Puppeteer (Node.js) \/ Playwright (Python, Node.js, .NET vb.):<\/strong> Headless (ba\u015fs\u0131z) taray\u0131c\u0131lar kullanarak benzer i\u015flevleri sunar. Yani, arka planda g\u00f6rsel aray\u00fcz\u00fc olmayan bir taray\u0131c\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rlar. Bu, performans\u0131 art\u0131r\u0131rken dinamik i\u00e7eriklerin kaz\u0131nmas\u0131n\u0131 m\u00fcmk\u00fcn k\u0131lar.<\/li>\n<\/ul>\n<p>Bu ara\u00e7lar, web kaz\u0131may\u0131 daha karma\u015f\u0131k hale getirse de, modern web sitelerinden veri \u00e7ekmek i\u00e7in vazge\u00e7ilmezdirler. \u00d6rne\u011fin, bir hisse senedi takip sitesindeki canl\u0131 grafik verilerini veya bir sosyal medya ak\u0131\u015f\u0131ndaki yeni g\u00f6nderileri \u00e7ekmek i\u00e7in dinamik i\u00e7erik kaz\u0131ma teknikleri kullan\u0131labilir.<\/p>\n<h3>Vaka Analizi: E-ticaret Sitelerinden Fiyat Kar\u015f\u0131la\u015ft\u0131rma<\/h3>\n<p>Bir e-ticaret fiyat kar\u015f\u0131la\u015ft\u0131rma platformu olu\u015fturmak istedi\u011finizi varsayal\u0131m. Bu platform, farkl\u0131 perakendecilerin ayn\u0131 \u00fcr\u00fcn i\u00e7in sundu\u011fu fiyatlar\u0131 toplay\u0131p kar\u015f\u0131la\u015ft\u0131r\u0131r. Bu proje, yukar\u0131da bahsedilen bir\u00e7ok tekni\u011fi bir araya getiren harika bir vaka analizidir:<\/p>\n<ol>\n<li><strong>Hedef Belirleme:<\/strong> Hangi e-ticaret sitelerinden veri \u00e7ekilece\u011fi belirlenir. (\u00d6rn: Amazon, Trendyol, Hepsiburada).<\/li>\n<li><strong>Yasalara Uygunluk:<\/strong> Her sitenin <code>robots.txt<\/code> dosyas\u0131 incelenir ve kullan\u0131m ko\u015fullar\u0131 okunur.<\/li>\n<li><strong>HTML Yap\u0131s\u0131 Analizi:<\/strong> Her sitenin \u00fcr\u00fcn sayfalar\u0131n\u0131n HTML yap\u0131s\u0131 (\u00fcr\u00fcn ad\u0131, fiyat, resim, a\u00e7\u0131klama elementleri) geli\u015ftirici ara\u00e7lar\u0131 kullan\u0131larak detayl\u0131ca analiz edilir.<\/li>\n<li><strong>Kaz\u0131ma Stratejisi:<\/strong>\n<ul>\n<li>Statik i\u00e7erikli siteler i\u00e7in Beautiful Soup ve Requests kullan\u0131labilir.<\/li>\n<li>Dinamik i\u00e7erikli (JavaScript ile fiyat g\u00fcncelleyen) siteler i\u00e7in Selenium veya Playwright tercih edilir.<\/li>\n<li>B\u00fcy\u00fck \u00f6l\u00e7ekli kaz\u0131ma i\u00e7in Scrapy framework&#8217;\u00fc, farkl\u0131 siteler i\u00e7in &#8220;spider&#8221;lar (\u00f6r\u00fcmcekler) yaz\u0131larak kullan\u0131labilir.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Veri Ayr\u0131\u015ft\u0131rma:<\/strong> CSS se\u00e7iciler veya XPath kullanarak \u00fcr\u00fcn ad\u0131, fiyat, URL, resim URL&#8217;si gibi bilgileri ham HTML&#8217;den ay\u0131klan\u0131r.<\/li>\n<li><strong>Veri Temizli\u011fi ve Normalle\u015ftirme:<\/strong> Elde edilen fiyatlar farkl\u0131 para birimlerinde veya formatlarda olabilir. Bunlar standart bir formata (\u00f6rn. T\u00fcrk Liras\u0131, ondal\u0131k say\u0131) d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. \u00dcr\u00fcn adlar\u0131ndaki varyasyonlar (\u00f6rn. &#8220;iPhone 15 Pro Max&#8221; vs &#8220;Apple iPhone 15 Pro Max&#8221;) tek bir standarda indirilir.<\/li>\n<li><strong>Depolama:<\/strong> Temizlenmi\u015f veriler bir veritaban\u0131na (SQL veya NoSQL) kaydedilir.<\/li>\n<li><strong>Planlama ve Otomasyon:<\/strong> Fiyatlar\u0131n d\u00fczenli aral\u0131klarla (\u00f6rne\u011fin g\u00fcnde bir kez) g\u00fcncellenmesi i\u00e7in kaz\u0131ma s\u00fcreci otomatikle\u015ftirilir ve bir zamanlay\u0131c\u0131 (cron job) ile \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r.<\/li>\n<\/ol>\n<p>Bu vaka analizi, web kaz\u0131man\u0131n sadece teknik bir s\u00fcre\u00e7 olmad\u0131\u011f\u0131n\u0131, ayn\u0131 zamanda dikkatli planlama, etik kurallara uyum ve s\u00fcrekli bak\u0131m gerektiren kapsaml\u0131 bir proje oldu\u011funu g\u00f6stermektedir.<\/p>\n<h2>Yap\u0131sal Olmayan Belgeleri Ayr\u0131\u015ft\u0131rma: PDF, Word ve E-posta Verilerini \u0130\u015fleme<\/h2>\n<p>Web sayfalar\u0131 d\u0131\u015f\u0131ndaki belgelerden veri \u00e7ekmek, genellikle farkl\u0131 zorluklar ve farkl\u0131 ara\u00e7lar gerektirir. PDF&#8217;ler, Word belgeleri ve e-postalar gibi yap\u0131sal olmayan veya yar\u0131 yap\u0131sal belgeler, bilgi madencili\u011fi i\u00e7in zengin kaynaklar olabilir ancak i\u00e7lerindeki veriye eri\u015fmek \u00f6zel teknikler gerektirir. Bu b\u00f6l\u00fcmde, bu belge t\u00fcrlerinden veri ayr\u0131\u015ft\u0131rman\u0131n inceliklerini ve kullan\u0131lan pop\u00fcler ara\u00e7lar\u0131 inceleyece\u011fiz.<\/p>\n<h3>PDF&#8217;lerden Veri \u00c7\u0131karma: Zorluklar ve \u00c7\u00f6z\u00fcmler<\/h3>\n<p>PDF (Portable Document Format) dosyalar\u0131, bilgiyi platformdan ba\u011f\u0131ms\u0131z olarak sunmak i\u00e7in harikad\u0131r, ancak i\u00e7lerindeki veriyi programatik olarak ay\u0131klamak genellikle zordur. Bunun ba\u015fl\u0131ca nedenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>G\u00f6rsel Tabanl\u0131 PDF&#8217;ler:<\/strong> Taranm\u0131\u015f belgelerden olu\u015fturulan PDF&#8217;ler asl\u0131nda birer resimdir. \u0130\u00e7lerinde se\u00e7ilebilir metin bulunmaz. Bu t\u00fcr PDF&#8217;lerden veri \u00e7ekmek i\u00e7in Optik Karakter Tan\u0131ma (OCR) teknolojisine ihtiya\u00e7 duyulur.<\/li>\n<li><strong>Karma\u015f\u0131k D\u00fczenler:<\/strong> Tablolar, s\u00fctunlar, grafikler ve farkl\u0131 yaz\u0131 tipleri gibi karma\u015f\u0131k d\u00fczenler, metnin do\u011fru s\u0131rayla veya do\u011fru ba\u011flamda \u00e7\u0131kar\u0131lmas\u0131n\u0131 zorla\u015ft\u0131rabilir.<\/li>\n<li><strong>Farkl\u0131 Olu\u015fturma Y\u00f6ntemleri:<\/strong> PDF&#8217;ler farkl\u0131 yaz\u0131l\u0131mlar taraf\u0131ndan farkl\u0131 \u015fekillerde olu\u015fturulabilir, bu da ayr\u0131\u015ft\u0131rma ara\u00e7lar\u0131n\u0131n t\u00fcm PDF&#8217;leri ayn\u0131 verimlilikle i\u015flemesini engeller.<\/li>\n<\/ul>\n<p>PDF&#8217;lerden veri \u00e7\u0131karmak i\u00e7in Python&#8217;da kullanabilece\u011finiz pop\u00fcler k\u00fct\u00fcphaneler \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>PyPDF2:<\/strong> Basit metin \u00e7\u0131karma, sayfa birle\u015ftirme, b\u00f6lme ve \u015fifreleme\/\u015fifre \u00e7\u00f6zme gibi temel PDF i\u015flemleri i\u00e7in kullan\u0131l\u0131r. Metin \u00e7\u0131karma yetenekleri s\u0131n\u0131rl\u0131 olabilir, \u00f6zellikle karma\u015f\u0131k d\u00fczenlerde.<\/li>\n<li><strong>pdfminer.six:<\/strong> PDF&#8217;lerden metin, layout (d\u00fczen) ve hatta baz\u0131 durumlarda tablo verisi \u00e7\u0131karmak i\u00e7in daha geli\u015fmi\u015f yetenekler sunar. Metin konumlar\u0131n\u0131, yaz\u0131 tiplerini ve boyutlar\u0131n\u0131 analiz ederek daha do\u011fru bir ayr\u0131\u015ft\u0131rma sa\u011flar.<\/li>\n<li><strong>tabula-py:<\/strong> \u00d6zellikle PDF&#8217;lerdeki tablolar\u0131 yap\u0131land\u0131r\u0131lm\u0131\u015f veri (DataFrame) olarak \u00e7\u0131karmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Java tabanl\u0131 Tabula k\u00fct\u00fcphanesinin Python sarmalay\u0131c\u0131s\u0131d\u0131r. Tablolar\u0131n konumlar\u0131n\u0131 belirleyerek veya otomatik olarak alg\u0131layarak verimli bir \u015fekilde tablo verisi \u00e7ekmenizi sa\u011flar.<\/li>\n<li><strong>Camelot:<\/strong> Tabula-py&#8217;ye alternatif olarak, PDF&#8217;lerden tablo \u00e7\u0131karmak i\u00e7in ba\u015fka bir g\u00fc\u00e7l\u00fc k\u00fct\u00fcphanedir. \u00d6zellikle k\u00f6t\u00fc taranm\u0131\u015f veya d\u00fczensiz tablolarla ba\u015fa \u00e7\u0131kmada daha iyi performans g\u00f6sterebilir.<\/li>\n<\/ul>\n<p><strong>\u00d6rnek: PyPDF2 ile Metin \u00c7\u0131karma<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code>from PyPDF2 import PdfReader\n\ndef pdf_metin_cikar(pdf_yolu):\n    try:\n        reader = PdfReader(pdf_yolu)\n        metin = \"\"\n        for page in reader.pages:\n            metin += page.extract_text() + \"\\n\"\n        return metin\n    except Exception as e:\n        print(f\"PDF dosyas\u0131ndan metin \u00e7\u0131kar\u0131l\u0131rken hata olu\u015ftu: {e}\")\n        return None\n\n# Kullan\u0131m \u00f6rne\u011fi:\n# pdf_dosyam = \"ornek_belge.pdf\"\n# cikan_metin = pdf_metin_cikar(pdf_dosyam)\n# if cikan_metin:\n#     print(cikan_metin[:500]) # \u0130lk 500 karakteri yazd\u0131r\n<\/code><\/pre>\n<\/p><\/div>\n<p>Bu kod, verilen bir PDF dosyas\u0131ndaki t\u00fcm sayfalar\u0131n metin i\u00e7eri\u011fini \u00e7\u0131kar\u0131r. Karma\u015f\u0131k tablolar veya g\u00f6rsel tabanl\u0131 PDF&#8217;ler i\u00e7in daha geli\u015fmi\u015f k\u00fct\u00fcphaneler veya OCR kullanmak gerekebilir.<\/p>\n<h3>Word Belgelerinden Veri \u00c7\u0131karma:<\/h3>\n<p>Microsoft Word (<code>.docx<\/code>) belgeleri, yap\u0131sal olarak XML tabanl\u0131d\u0131r, bu da onlar\u0131 programatik olarak i\u015flemeyi PDF&#8217;lere g\u00f6re daha kolay hale getirir. Python&#8217;da <code>python-docx<\/code> k\u00fct\u00fcphanesi, Word belgelerini olu\u015fturmak, de\u011fi\u015ftirmek ve i\u00e7lerinden veri ay\u0131klamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<div class=\"code-container\">\n<pre><code>from docx import Document\n\ndef word_metin_cikar(docx_yolu):\n    try:\n        document = Document(docx_yolu)\n        metin = []\n        for paragraph in document.paragraphs:\n            metin.append(paragraph.text)\n        return \"\\n\".join(metin)\n    except Exception as e:\n        print(f\"Word dosyas\u0131ndan metin \u00e7\u0131kar\u0131l\u0131rken hata olu\u015ftu: {e}\")\n        return None\n\n# Kullan\u0131m \u00f6rne\u011fi:\n# word_dosyam = \"ornek_rapor.docx\"\n# cikan_metin = word_metin_cikar(word_dosyam)\n# if cikan_metin:\n#     print(cikan_metin[:500])\n<\/code><\/pre>\n<\/p><\/div>\n<p>Bu \u00f6rnek, bir Word belgesindeki t\u00fcm paragraflar\u0131 okur ve metinlerini birle\u015ftirir. Tablolar, resimler veya di\u011fer \u00f6zel elementler i\u00e7in <code>document.tables<\/code> veya <code>document.inline_shapes<\/code> gibi \u00f6zellikler kullan\u0131labilir.<\/p>\n<h3>E-posta Ayr\u0131\u015ft\u0131rma:<\/h3>\n<p>E-postalar, genellikle hem yap\u0131sal (ba\u015fl\u0131klar, g\u00f6nderen, al\u0131c\u0131) hem de yap\u0131sal olmayan (mesaj g\u00f6vdesi) veriler i\u00e7erir. Python&#8217;\u0131n yerle\u015fik <code>email<\/code> mod\u00fcl\u00fc, e-postalar\u0131 ayr\u0131\u015ft\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. E-postalar\u0131 dosya olarak (<code>.eml<\/code>) veya do\u011frudan bir posta sunucusundan (IMAP\/POP3) okuyarak i\u015fleyebilirsiniz.<\/p>\n<div class=\"code-container\">\n<pre><code>import email\nfrom email import policy\nfrom email.parser import BytesParser\n\ndef eposta_icerik_cikar(eml_dosya_yolu):\n    try:\n        with open(eml_dosya_yolu, 'rb') as fp:\n            msg = BytesParser(policy=policy.default).parse(fp)\n\n        konu = msg['Subject']\n        gonderen = msg['From']\n        alicilar = msg['To']\n        \n        govde_metni = \"\"\n        if msg.is_multipart():\n            for part in msg.iter_parts():\n                content_type = part.get_content_type()\n                content_disposition = str(part.get(\"Content-Disposition\"))\n\n                if \"text\/plain\" in content_type and \"attachment\" not in content_disposition:\n                    govde_metni = part.get_payload(decode=True).decode()\n                    break # Sadece ilk d\u00fcz metin k\u0131sm\u0131n\u0131 al\n\n        else: # Tek par\u00e7al\u0131 e-posta\n            govde_metni = msg.get_payload(decode=True).decode()\n        \n        return {\n            \"Konu\": konu,\n            \"G\u00f6nderen\": gonderen,\n            \"Al\u0131c\u0131lar\": alicilar,\n            \"G\u00f6vde Metni\": govde_metni\n        }\n    except Exception as e:\n        print(f\"E-posta ayr\u0131\u015ft\u0131r\u0131l\u0131rken hata olu\u015ftu: {e}\")\n        return None\n\n# Kullan\u0131m \u00f6rne\u011fi:\n# eml_dosyam = \"ornek_eposta.eml\"\n# eposta_verileri = eposta_icerik_cikar(eml_dosyam)\n# if eposta_verileri:\n#     print(f\"Konu: {eposta_verileri['Konu']}\")\n#     print(f\"G\u00f6nderen: {eposta_verileri['G\u00f6nderen']}\")\n#     print(f\"G\u00f6vde Metni (ilk 200 karakter): {eposta_verileri['G\u00f6vde Metni'][:200]}\")\n<\/code><\/pre>\n<\/p><\/div>\n<p>Bu kod, bir <code>.eml<\/code> dosyas\u0131ndan konu, g\u00f6nderen, al\u0131c\u0131lar ve d\u00fcz metin g\u00f6vdesini \u00e7\u0131kar\u0131r. E-postalar genellikle \u00e7ok par\u00e7al\u0131d\u0131r (hem HTML hem de d\u00fcz metin versiyonlar\u0131, ekler vb. i\u00e7erir), bu nedenle do\u011fru par\u00e7ay\u0131 bulmak i\u00e7in biraz mant\u0131k y\u00fcr\u00fctmek gerekebilir. Regex (d\u00fczenli ifadeler) kullanarak e-posta g\u00f6vdesindeki belirli kal\u0131plar\u0131 (\u00f6rne\u011fin, sipari\u015f numaralar\u0131, telefon numaralar\u0131) da ay\u0131klayabilirsiniz.<\/p>\n<h3>OCR (Optik Karakter Tan\u0131ma) Teknolojisinin Rol\u00fc<\/h3>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, taranm\u0131\u015f PDF&#8217;ler veya resim format\u0131ndaki belgelerden metin \u00e7\u0131karmak i\u00e7in OCR teknolojisi vazge\u00e7ilmezdir. OCR, bir resimdeki karakterleri tan\u0131r ve onlar\u0131 d\u00fczenlenebilir metne d\u00f6n\u00fc\u015ft\u00fcr\u00fcr. Bu, eski fiziksel belgelerin dijitalle\u015ftirilmesi ve aranabilir hale getirilmesi i\u00e7in kritik bir ad\u0131md\u0131r.<\/p>\n<p>Pop\u00fcler OCR ara\u00e7lar\u0131 ve servisleri:<\/p>\n<ul>\n<li><strong>Tesseract OCR:<\/strong> A\u00e7\u0131k kaynakl\u0131 ve yayg\u0131n olarak kullan\u0131lan bir OCR motorudur. Python i\u00e7in <code>pytesseract<\/code> sarmalay\u0131c\u0131s\u0131 ile kolayca entegre edilebilir.<\/li>\n<li><strong>Google Cloud Vision API:<\/strong> Google&#8217;\u0131n bulut tabanl\u0131 bir hizmetidir ve \u00e7ok y\u00fcksek do\u011frulukta OCR yetenekleri sunar. \u00d6zellikle el yaz\u0131s\u0131 tan\u0131ma ve karma\u015f\u0131k belge d\u00fczenleriyle ba\u015fa \u00e7\u0131kmada ba\u015far\u0131l\u0131d\u0131r.<\/li>\n<li><strong>Azure Form Recognizer \/ AWS Textract:<\/strong> Microsoft ve Amazon&#8217;un bulut tabanl\u0131 OCR hizmetleridir. Sadece metin tan\u0131makla kalmaz, ayn\u0131 zamanda faturalar, makbuzlar, pasaportlar gibi belirli belge t\u00fcrlerindeki alanlar\u0131 otomatik olarak alg\u0131lay\u0131p yap\u0131land\u0131r\u0131lm\u0131\u015f veri olarak \u00e7\u0131karabilirler.<\/li>\n<\/ul>\n<p>OCR, \u00f6zellikle finans, hukuk ve sa\u011fl\u0131k sekt\u00f6rlerinde, eski belgelerden veya taranm\u0131\u015f formlardan bilgi \u00e7ekmek i\u00e7in yo\u011fun bir \u015fekilde kullan\u0131lmaktad\u0131r. \u00d6rne\u011fin, bir bankan\u0131n eski kredi ba\u015fvuru formlar\u0131ndan m\u00fc\u015fteri bilgilerini otomatik olarak \u00e7\u0131karmas\u0131, OCR sayesinde m\u00fcmk\u00fcnd\u00fcr.<\/p>\n<h3>Vaka Analizi: Faturalardan veya S\u00f6zle\u015fmelerden Anahtar Bilgi \u00c7\u0131karma<\/h3>\n<p>Bir muhasebe yaz\u0131l\u0131m\u0131 geli\u015ftirdi\u011finizi ve m\u00fc\u015fterilerinizin sisteme y\u00fckledi\u011fi faturalardan otomatik olarak bilgi (fatura numaras\u0131, tarih, toplam tutar, sat\u0131c\u0131 ad\u0131 vb.) \u00e7ekmek istedi\u011finizi d\u00fc\u015f\u00fcnelim. Bu, yap\u0131sal olmayan belgeleri ayr\u0131\u015ft\u0131rman\u0131n harika bir \u00f6rne\u011fidir:<\/p>\n<ol>\n<li><strong>Giri\u015f Belgeleri:<\/strong> M\u00fc\u015fterileriniz PDF veya taranm\u0131\u015f resim (JPEG, PNG) format\u0131nda faturalar y\u00fckler.<\/li>\n<li><strong>OCR Uygulamas\u0131:<\/strong> E\u011fer belge taranm\u0131\u015f bir resim veya g\u00f6rsel tabanl\u0131 bir PDF ise, Google Cloud Vision API veya AWS Textract gibi bir bulut OCR hizmeti kullan\u0131larak metin \u00e7\u0131kar\u0131l\u0131r. Bu servisler, sadece metni de\u011fil, ayn\u0131 zamanda metnin konumunu ve bazen de anahtar-de\u011fer \u00e7iftlerini (\u00f6rne\u011fin &#8220;Fatura No: XYZ123&#8221;) alg\u0131layabilir.<\/li>\n<li><strong>Metin Ayr\u0131\u015ft\u0131rma:<\/strong> OCR&#8217;dan veya do\u011frudan metin tabanl\u0131 PDF&#8217;den elde edilen metin \u00fczerinde d\u00fczenli ifadeler (regex) veya do\u011fal dil i\u015fleme (NLP) teknikleri kullan\u0131larak anahtar bilgiler aran\u0131r. \u00d6rne\u011fin, &#8220;Fatura No:&#8221; kal\u0131b\u0131n\u0131 takip eden alfan\u00fcmerik bir dizi, &#8220;Toplam Tutar:&#8221; kal\u0131b\u0131n\u0131 takip eden bir say\u0131 ve para birimi gibi.<\/li>\n<li><strong>Do\u011frulama ve Temizleme:<\/strong> \u00c7\u0131kar\u0131lan veriler, olas\u0131 hatalar\u0131 kontrol etmek i\u00e7in do\u011frulan\u0131r (\u00f6rne\u011fin, tarihin ge\u00e7erli bir formatta olup olmad\u0131\u011f\u0131, tutar\u0131n say\u0131sal olup olmad\u0131\u011f\u0131).<\/li>\n<li><strong>Yap\u0131sal Hale Getirme:<\/strong> \u00c7\u0131kar\u0131lan t\u00fcm bilgiler (fatura numaras\u0131, tarih, tutar vb.) bir JSON nesnesi veya veritaban\u0131 kayd\u0131 gibi yap\u0131sal bir formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/li>\n<li><strong>Depolama ve Entegrasyon:<\/strong> Bu yap\u0131land\u0131r\u0131lm\u0131\u015f veriler, muhasebe yaz\u0131l\u0131m\u0131n\u0131n veritaban\u0131na kaydedilir ve di\u011fer mod\u00fcllerle entegre edilir.<\/li>\n<\/ol>\n<p>Bu s\u00fcre\u00e7, manuel veri giri\u015fini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r, hata oranlar\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr ve i\u015f s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r. \u00d6zellikle finans, hukuk ve sa\u011fl\u0131k sekt\u00f6rleri gibi belge yo\u011fun alanlarda b\u00fcy\u00fck verimlilik art\u0131\u015flar\u0131 sa\u011flar.<\/p>\n<h2>Veri Kalitesi ve Temizli\u011fi: Kaz\u0131nan Veriyi Anlaml\u0131 Hale Getirmek<\/h2>\n<p>Veri kaz\u0131ma ve ayr\u0131\u015ft\u0131rma s\u00fcre\u00e7leri, ham veriyi toplamak ve ilk d\u00fczeyde i\u015flemek i\u00e7in harika ara\u00e7lard\u0131r. Ancak, bu a\u015famadan sonra elde edilen verinin do\u011frudan kullan\u0131ma haz\u0131r oldu\u011funu varsaymak b\u00fcy\u00fck bir hata olur. Kaz\u0131nan veriler genellikle g\u00fcr\u00fclt\u00fcl\u00fc, eksik, tutars\u0131z veya yanl\u0131\u015f formatta olabilir. Bu nedenle, veriyi anlaml\u0131, g\u00fcvenilir ve analiz edilebilir hale getirmek i\u00e7in kapsaml\u0131 bir veri temizli\u011fi ve kalitesi s\u00fcreci \u015fartt\u0131r.<\/p>\n<h3>Neden Veri Temizli\u011fi Bu Kadar \u00d6nemli?<\/h3>\n<p>Veri kalitesi, herhangi bir veri projesinin temelidir. &#8220;\u00c7\u00f6p girdi, \u00e7\u00f6p \u00e7\u0131kt\u0131&#8221; (Garbage in, garbage out &#8211; GIGO) prensibi, veri analizi ve makine \u00f6\u011frenimi projelerinde s\u0131k\u00e7a kar\u015f\u0131m\u0131za \u00e7\u0131kar. K\u00f6t\u00fc kaliteli veri, yanl\u0131\u015f analizlere, hatal\u0131 kararlara ve sonu\u00e7 olarak i\u015f s\u00fcre\u00e7lerinde ciddi aksakl\u0131klara yol a\u00e7abilir. \u00d6rne\u011fin, bir fiyat kar\u015f\u0131la\u015ft\u0131rma sitesinde yanl\u0131\u015f fiyatlar veya \u00fcr\u00fcn adlar\u0131, m\u00fc\u015fteri g\u00fcvenini sarsabilir ve i\u015f kayb\u0131na neden olabilir. Veri temizli\u011fi ve kalitesi, bu t\u00fcr riskleri minimize etmek ve verinin ger\u00e7ek de\u011ferini ortaya \u00e7\u0131karmak i\u00e7in kritik bir ad\u0131md\u0131r.<\/p>\n<h3>Temizleme Teknikleri ve Stratejileri<\/h3>\n<p>Veri temizli\u011fi s\u00fcreci, genellikle a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 ve teknikleri i\u00e7erir:<\/p>\n<ol>\n<li><strong>Tekrarlanan Verileri Giderme (Deduplication):<\/strong>\n<ul>\n<li>Kaz\u0131ma s\u0131ras\u0131nda ayn\u0131 veri \u00f6\u011fesi birden fazla kez toplanm\u0131\u015f olabilir. Benzersiz tan\u0131mlay\u0131c\u0131lar (\u00f6rne\u011fin \u00fcr\u00fcn ID&#8217;leri, URL&#8217;ler) kullanarak bu tekrarlar\u0131n tespit edilmesi ve sadece bir kopyas\u0131n\u0131n saklanmas\u0131 \u00f6nemlidir.<\/li>\n<li>\u00d6rne\u011fin, farkl\u0131 zamanlarda kaz\u0131lan ayn\u0131 \u00fcr\u00fcn\u00fcn iki farkl\u0131 kayd\u0131 varsa, bunlar\u0131 birle\u015ftirmek veya eski olan\u0131 silmek gerekebilir.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Eksik De\u011ferleri Ele Alma:<\/strong>\n<ul>\n<li>Baz\u0131 alanlar bo\u015f veya eksik olabilir (\u00f6rne\u011fin, bir \u00fcr\u00fcn\u00fcn a\u00e7\u0131klamas\u0131 veya fiyat\u0131).<\/li>\n<li>Bu eksik de\u011ferler ya doldurulmal\u0131d\u0131r (\u00f6rne\u011fin, ortalama bir de\u011ferle, varsay\u0131lan bir de\u011ferle veya di\u011fer kaynaklardan tamamlanarak) ya da ilgili kay\u0131tlar analizden \u00e7\u0131kar\u0131lmal\u0131d\u0131r. Karar, eksik verinin oran\u0131na ve projenin gereksinimlerine ba\u011fl\u0131d\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Format D\u00f6n\u00fc\u015ft\u00fcrme ve Normalle\u015ftirme:<\/strong>\n<ul>\n<li>Veriler farkl\u0131 formatlarda olabilir (\u00f6rne\u011fin, &#8220;25.00 TL&#8221;, &#8220;25,00 TL&#8221;, &#8220;$25.00&#8221;). Bunlar\u0131n hepsinin standart bir formata (\u00f6rne\u011fin, sadece &#8220;25.00&#8221; veya &#8220;25.00 TL&#8221;) d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi gerekir.<\/li>\n<li>Tarih ve saat bilgileri de farkl\u0131 formatlarda gelebilir (\u00f6rn. &#8220;01\/01\/2023&#8221;, &#8220;1 Ocak 2023&#8221;). Bunlar\u0131n standart bir tarih\/saat format\u0131na d\u00f6n\u00fc\u015ft\u00fcr\u00fclmesi (\u00f6rn. YYYY-MM-DD) analiz i\u00e7in \u00f6nemlidir.<\/li>\n<li>Metin verilerinde b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf tutars\u0131zl\u0131klar\u0131 (\u00f6rn. &#8220;ELMA&#8221; vs &#8220;elma&#8221;) olabilir. Bunlar\u0131n hepsini k\u00fc\u00e7\u00fck harfe d\u00f6n\u00fc\u015ft\u00fcrmek veya ba\u015f harflerini b\u00fcy\u00fctmek gibi normalizasyon i\u015flemleri yap\u0131labilir.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Anormal De\u011ferleri (Ayk\u0131r\u0131 De\u011ferler) Tespit Etme ve D\u00fczeltme:<\/strong>\n<ul>\n<li>Baz\u0131 veriler, genel veri setinden belirgin \u015fekilde farkl\u0131l\u0131k g\u00f6sterebilir (\u00f6rne\u011fin, bir \u00fcr\u00fcn\u00fcn fiyat\u0131n\u0131n aniden \u00e7ok y\u00fcksek veya \u00e7ok d\u00fc\u015f\u00fck olmas\u0131). Bunlar veri giri\u015f hatalar\u0131ndan, kaz\u0131ma hatalar\u0131ndan veya ger\u00e7ek ayk\u0131r\u0131 de\u011ferlerden kaynaklanabilir.<\/li>\n<li>\u0130statistiksel y\u00f6ntemler veya i\u015f kurallar\u0131 kullan\u0131larak ayk\u0131r\u0131 de\u011ferler tespit edilir ve d\u00fczeltilir veya kald\u0131r\u0131l\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Metin Temizli\u011fi ve Standardizasyonu:<\/strong>\n<ul>\n<li>Metin alanlar\u0131nda gereksiz bo\u015fluklar, \u00f6zel karakterler, HTML etiketleri veya anlams\u0131z kelimeler bulunabilir.<\/li>\n<li>Bu t\u00fcr g\u00fcr\u00fclt\u00fcl\u00fc elemanlar\u0131n kald\u0131r\u0131lmas\u0131, metin analizi (NLP) i\u00e7in veriyi daha kullan\u0131\u015fl\u0131 hale getirir.<\/li>\n<li>\u00d6rne\u011fin, &#8221;  \u00dcr\u00fcn Ad\u0131  &#8221; yerine &#8220;\u00dcr\u00fcn Ad\u0131&#8221; olarak d\u00fczeltmek.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Veri Do\u011frulama:<\/strong>\n<ul>\n<li>Verilerin belirli kurallara veya k\u0131s\u0131tlamalara uyup uymad\u0131\u011f\u0131n\u0131 kontrol etme. \u00d6rne\u011fin, bir e-posta adresinin ge\u00e7erli bir formatta olup olmad\u0131\u011f\u0131n\u0131 veya bir ya\u015f de\u011ferinin pozitif bir say\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek.<\/li>\n<li>Bu, veritaban\u0131 k\u0131s\u0131tlamalar\u0131 veya \u00f6zel do\u011frulama fonksiyonlar\u0131 ile yap\u0131labilir.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Ara\u00e7lar: Pandas (Python)<\/h3>\n<p>Python&#8217;daki Pandas k\u00fct\u00fcphanesi, veri temizli\u011fi ve manip\u00fclasyonu i\u00e7in en g\u00fc\u00e7l\u00fc ve yayg\u0131n olarak kullan\u0131lan ara\u00e7lardan biridir. DataFrame ad\u0131 verilen tablo benzeri veri yap\u0131lar\u0131 sayesinde, b\u00fcy\u00fck veri setlerini kolayca y\u00fckleyebilir, i\u015fleyebilir ve temizleyebilirsiniz. Pandas ile yukar\u0131da bahsedilen t\u00fcm temizleme tekniklerini kolayca uygulayabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>import pandas as pd\nimport numpy as np\n\n# \u00d6rnek bir DataFrame olu\u015ftural\u0131m (kaz\u0131nan veriyi temsil ediyor)\ndata = {\n    'UrunAdi': ['  Laptop Pro X ', ' Telefon Y  ', 'Laptop Pro X', 'tablet Z', np.nan, 'Telefon Y'],\n    'Fiyat': ['12.500 TL', '8.000,00 TL', '12500TL', '5000', '6000 TL', '8000 TL'],\n    'Stok': [10, 5, 10, 0, np.nan, 5],\n    'Aciklama': ['Harika bir laptop.', 'H\u0131zl\u0131 ve kullan\u0131\u015fl\u0131.', 'G\u00fc\u00e7l\u00fc bilgisayar.', '', 'Kompakt tablet.', '']\n}\ndf = pd.DataFrame(data)\nprint(\"Orijinal DataFrame:\")\nprint(df)\n\n# 1. Tekrarlanan verileri giderme (UrunAdi'na g\u00f6re)\ndf.drop_duplicates(subset=['UrunAdi'], inplace=True)\nprint(\"\\nTekrarlananlar giderildikten sonra:\")\nprint(df)\n\n# 2. Eksik de\u011ferleri ele alma (Stok'u ortalama ile doldurma, Aciklama'y\u0131 'Yok' ile doldurma)\ndf['Stok'].fillna(df['Stok'].mean(), inplace=True)\ndf['Aciklama'].fillna('Yok', inplace=True)\nprint(\"\\nEksik de\u011ferler doldurulduktan sonra:\")\nprint(df)\n\n# 3. Fiyat format\u0131n\u0131 normalle\u015ftirme\ndef fiyat_temizle(fiyat):\n    if isinstance(fiyat, str):\n        fiyat = fiyat.replace('TL', '').replace('.', '').replace(',', '.').strip()\n        try:\n            return float(fiyat)\n        except ValueError:\n            return np.nan\n    return fiyat\n\ndf['Fiyat'] = df['Fiyat'].apply(fiyat_temizle)\nprint(\"\\nFiyatlar normalle\u015ftirildikten sonra:\")\nprint(df)\n\n# 4. UrunAdi'ndaki gereksiz bo\u015fluklar\u0131 kald\u0131rma ve ba\u015f harfleri b\u00fcy\u00fctme\ndf['UrunAdi'] = df['UrunAdi'].str.strip().str.title()\nprint(\"\\nUrunAdi temizlendikten sonra:\")\nprint(df)\n<\/code><\/pre>\n<\/p><\/div>\n<p>Bu \u00f6rnek, Pandas&#8217;\u0131n veri temizli\u011fi i\u00e7in ne kadar esnek ve g\u00fc\u00e7l\u00fc oldu\u011funu g\u00f6stermektedir. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, bu ad\u0131mlar daha karma\u015f\u0131k olabilir ve verinin \u00f6zelliklerine g\u00f6re uyarlanmal\u0131d\u0131r. Veri temizli\u011fi, genellikle bir veri projesinin en \u00e7ok zaman alan ama ayn\u0131 zamanda en de\u011ferli a\u015famalar\u0131ndan biridir, \u00e7\u00fcnk\u00fc do\u011fru ve g\u00fcvenilir sonu\u00e7lar elde etmenin temelini olu\u015fturur.<\/p>\n<h2>\u0130leri D\u00fczey Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma Teknikleri: Engelleri A\u015fmak<\/h2>\n<p>Basit web sayfalar\u0131ndan veya yap\u0131sal belgelerden veri \u00e7ekmek nispeten kolay olsa da, ger\u00e7ek d\u00fcnyadaki kaz\u0131ma projeleri genellikle \u00e7e\u015fitli engellerle kar\u015f\u0131la\u015f\u0131r. Bu engeller, kaz\u0131ma i\u015flemini zorla\u015ft\u0131rabilir, yava\u015flatabilir veya tamamen durdurabilir. Ancak, bu zorluklar\u0131n \u00fcstesinden gelmek i\u00e7in ileri d\u00fczey teknikler ve stratejiler mevcuttur. Bu b\u00f6l\u00fcmde, s\u0131k kar\u015f\u0131la\u015f\u0131lan engelleri ve bunlarla ba\u015fa \u00e7\u0131kma y\u00f6ntemlerini ele alaca\u011f\u0131z.<\/p>\n<h3>Captcha ve IP Engellemeleri: Nas\u0131l A\u015f\u0131l\u0131r?<\/h3>\n<p>Bir\u00e7ok web sitesi, otomatik botlar\u0131n a\u015f\u0131r\u0131 y\u00fckleme yapmas\u0131n\u0131 veya k\u00f6t\u00fc niyetli faaliyetlerde bulunmas\u0131n\u0131 engellemek i\u00e7in \u00e7e\u015fitli koruma mekanizmalar\u0131 kullan\u0131r:<\/p>\n<ul>\n<li><strong>Captcha (Completely Automated Public Turing test to tell Computers and Humans Apart):<\/strong> Kullan\u0131c\u0131lar\u0131n bir resimdeki metni okumas\u0131n\u0131 veya belirli nesneleri se\u00e7mesini isteyen testlerdir. Botlar\u0131n bu testleri ge\u00e7mesi zordur.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> Captcha \u00e7\u00f6zme servisleri (\u00f6rne\u011fin 2Captcha, Anti-Captcha) kullan\u0131labilir. Bu servisler, ger\u00e7ek insanlar veya geli\u015fmi\u015f AI algoritmalar\u0131 arac\u0131l\u0131\u011f\u0131yla Captcha&#8217;lar\u0131 sizin i\u00e7in \u00e7\u00f6zer ve size sonucu geri g\u00f6nderir. Alternatif olarak, baz\u0131 basit Captcha t\u00fcrleri i\u00e7in makine \u00f6\u011frenimi modelleri e\u011fitilebilir, ancak bu daha karma\u015f\u0131k bir yakla\u015f\u0131md\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>IP Engellemeleri ve Oran S\u0131n\u0131rlamalar\u0131 (Rate Limiting):<\/strong> Bir web sitesi, ayn\u0131 IP adresinden gelen \u00e7ok say\u0131da iste\u011fi k\u0131sa s\u00fcrede alg\u0131lad\u0131\u011f\u0131nda, o IP adresini ge\u00e7ici veya kal\u0131c\u0131 olarak engelleyebilir. Oran s\u0131n\u0131rlamas\u0131 ise, belirli bir zaman diliminde yapabilece\u011finiz istek say\u0131s\u0131n\u0131 k\u0131s\u0131tlar.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong>\n<ul>\n<li><strong>Proxy&#8217;ler ve VPN&#8217;ler:<\/strong> \u0130steklerinizi farkl\u0131 IP adresleri \u00fczerinden y\u00f6nlendirerek engellemelerden ka\u00e7\u0131nabilirsiniz. \u00dccretli proxy servisleri genellikle g\u00fcvenilir ve h\u0131zl\u0131d\u0131r. Rotasyonlu proxy&#8217;ler, her istek veya belirli aral\u0131klarla IP adresinizi de\u011fi\u015ftirerek daha etkili koruma sa\u011flar.<\/li>\n<li><strong>\u0130stekler Aras\u0131nda Gecikmeler (Delays):<\/strong> Her istek aras\u0131nda rastgele gecikmeler eklemek, do\u011fal bir insan davran\u0131\u015f\u0131n\u0131 taklit eder ve bot olarak alg\u0131lanma riskini azalt\u0131r. \u00d6rne\u011fin, <code>time.sleep(random.uniform(2, 5))<\/code> ile 2 ila 5 saniye aras\u0131nda rastgele bir bekleme s\u00fcresi ekleyebilirsiniz.<\/li>\n<li><strong>User-Agent Rotasyonu:<\/strong> Her istekte farkl\u0131 bir User-Agent (taray\u0131c\u0131 tan\u0131mlay\u0131c\u0131s\u0131) kullanmak, sitenin sizi tek bir bot olarak alg\u0131lamas\u0131n\u0131 zorla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Headless Taray\u0131c\u0131lar:<\/strong> Selenium veya Playwright gibi ara\u00e7lar\u0131 kullan\u0131rken, taray\u0131c\u0131n\u0131n parmak izini (fingerprint) de\u011fi\u015ftirmeye \u00e7al\u0131\u015fmak da faydal\u0131 olabilir.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Giri\u015f Gerektiren Sitelerle \u00c7al\u0131\u015fma (Oturum Y\u00f6netimi)<\/h3>\n<p>Bir\u00e7ok de\u011ferli veri, giri\u015f yapmay\u0131 gerektiren sitelerde (\u00f6rne\u011fin, sosyal medya platformlar\u0131, \u00f6zel paneller, e-posta servisleri) bulunur. Bu t\u00fcr sitelerden veri kaz\u0131mak i\u00e7in oturum y\u00f6netimi (session management) tekniklerini kullanmak gerekir:<\/p>\n<ul>\n<li><strong>\u00c7erezler (Cookies):<\/strong> Giri\u015f yapt\u0131ktan sonra sunucu taraf\u0131ndan g\u00f6nderilen \u00e7erezler, oturumunuzu s\u00fcrd\u00fcrmek i\u00e7in kullan\u0131l\u0131r. Kaz\u0131ma ara\u00e7lar\u0131, bu \u00e7erezleri saklay\u0131p sonraki isteklerde g\u00f6ndererek oturumunuzu koruyabilir. Python&#8217;daki <code>requests<\/code> k\u00fct\u00fcphanesinin <code>Session<\/code> objesi, \u00e7erezleri otomatik olarak y\u00f6netir.<\/li>\n<li><strong>Form Otomasyonu:<\/strong> Selenium veya Playwright gibi taray\u0131c\u0131 otomasyon ara\u00e7lar\u0131, giri\u015f formlar\u0131n\u0131 doldurup &#8220;Giri\u015f Yap&#8221; butonuna t\u0131klayarak do\u011frudan taray\u0131c\u0131 \u00fczerinden giri\u015f yapman\u0131z\u0131 sa\u011flar. Bu, en g\u00fcvenilir y\u00f6ntemlerden biridir \u00e7\u00fcnk\u00fc t\u00fcm JavaScript ve g\u00fcvenlik kontrolleri ger\u00e7ek bir taray\u0131c\u0131da \u00e7al\u0131\u015f\u0131r.<\/li>\n<li><strong>API Kullan\u0131m\u0131:<\/strong> M\u00fcmk\u00fcnse, web kaz\u0131ma yerine sitenin resmi API&#8217;sini (Uygulama Programlama Aray\u00fcz\u00fc) kullanmak her zaman tercih edilmelidir. API&#8217;ler, yap\u0131land\u0131r\u0131lm\u0131\u015f verilere do\u011frudan ve yasal yollarla eri\u015fim sa\u011flar.<\/li>\n<\/ul>\n<div class=\"code-container\">\n<pre><code>import requests\n\n# \u00d6rnek bir giri\u015f i\u015flemi\nlogin_url = \"https:\/\/www.example.com\/login\"\ndata = {\n    'username': 'kullanici_adi',\n    'password': 'sifre'\n}\n\nwith requests.Session() as session:\n    # Giri\u015f iste\u011fini g\u00f6nder\n    post_response = session.post(login_url, data=data)\n    \n    # Giri\u015f ba\u015far\u0131l\u0131ysa, session objesi \u00e7erezleri saklar\n    # Art\u0131k bu session objesini kullanarak giri\u015f gerektiren sayfalara eri\u015febiliriz\n    if post_response.status_code == 200 and \"Ba\u015far\u0131l\u0131\" in post_response.text: # Veya ba\u015fka bir kontrol\n        print(\"Giri\u015f ba\u015far\u0131l\u0131!\")\n        \n        # Giri\u015f yap\u0131lm\u0131\u015f bir sayfadan veri \u00e7ekme\n        protected_page_url = \"https:\/\/www.example.com\/dashboard\"\n        protected_page_response = session.get(protected_page_url)\n        print(f\"Korunan sayfan\u0131n i\u00e7eri\u011fi (ilk 100 karakter): {protected_page_response.text[:100]}\")\n    else:\n        print(\"Giri\u015f ba\u015far\u0131s\u0131z oldu.\")\n<\/code><\/pre>\n<\/p><\/div>\n<h3>Makine \u00d6\u011frenimi Destekli Ayr\u0131\u015ft\u0131rma (\u015eablon Tabanl\u0131 Olmayan Veri \u0130\u00e7in)<\/h3>\n<p>Geleneksel ayr\u0131\u015ft\u0131rma y\u00f6ntemleri (CSS se\u00e7iciler, XPath, regex), verinin belirli bir \u015fablona veya yap\u0131ya sahip oldu\u011fu durumlarda \u00e7ok etkilidir. Ancak, bir\u00e7ok web sayfas\u0131 veya belge, tutarl\u0131 bir \u015fablona sahip de\u011fildir veya d\u00fczenleri s\u0131k s\u0131k de\u011fi\u015fir. Bu gibi durumlarda, makine \u00f6\u011frenimi (ML) modelleri devreye girebilir:<\/p>\n<ul>\n<li><strong>Varl\u0131k Tan\u0131ma (Named Entity Recognition &#8211; NER):<\/strong> Do\u011fal Dil \u0130\u015fleme (NLP) tekniklerinin bir alt dal\u0131d\u0131r. Metin i\u00e7indeki ki\u015fi adlar\u0131, yer adlar\u0131, tarihler, para birimleri gibi belirli varl\u0131klar\u0131 otomatik olarak tan\u0131mlayabilir. \u00d6rne\u011fin, bir haber makalesinden \u00f6nemli ki\u015fileri ve kurulu\u015flar\u0131 \u00e7\u0131karmak i\u00e7in kullan\u0131labilir.<\/li>\n<li><strong>\u015eablon Alg\u0131lama ve Adaptif Ayr\u0131\u015ft\u0131rma:<\/strong> ML modelleri, benzer yap\u0131ya sahip belgelerden veri \u00e7ekmek i\u00e7in e\u011fitilebilir. Model, bir belgenin &#8220;fatura&#8221; veya &#8220;s\u00f6zle\u015fme&#8221; oldu\u011funu tan\u0131yabilir ve ard\u0131ndan o belge t\u00fcr\u00fcne \u00f6zg\u00fc alanlar\u0131 (fatura numaras\u0131, toplam tutar) ay\u0131klamak i\u00e7in e\u011fitilmi\u015f bir ayr\u0131\u015ft\u0131rma mant\u0131\u011f\u0131 uygulayabilir. Bu, \u015fablonlar\u0131n s\u0131k de\u011fi\u015fti\u011fi veya \u00e7ok say\u0131da farkl\u0131 \u015fablonun oldu\u011fu durumlarda manuel kural yazma y\u00fck\u00fcn\u00fc azalt\u0131r.<\/li>\n<li><strong>G\u00f6rsel Makine \u00d6\u011frenimi (Computer Vision):<\/strong> \u00d6zellikle taranm\u0131\u015f belgelerden veya resimlerden veri \u00e7ekmek i\u00e7in kullan\u0131l\u0131r. OCR ile metin \u00e7\u0131kar\u0131ld\u0131ktan sonra, metin bloklar\u0131n\u0131n belgedeki konumlar\u0131n\u0131 analiz ederek (\u00f6rne\u011fin, bir tablonun nerede ba\u015flad\u0131\u011f\u0131n\u0131 veya bir fiyat\u0131n nerede oldu\u011funu) daha ak\u0131ll\u0131 ayr\u0131\u015ft\u0131rma yapabilir.<\/li>\n<\/ul>\n<p>Bu ileri d\u00fczey teknikler, \u00f6zellikle b\u00fcy\u00fck veri hacimleriyle ve karma\u015f\u0131k, de\u011fi\u015fken veri yap\u0131lar\u0131yla u\u011fra\u015f\u0131rken kaz\u0131ma ve ayr\u0131\u015ft\u0131rma s\u00fcre\u00e7lerini daha sa\u011flam ve esnek hale getirir.<\/p>\n<h2>Vaka Analizi: B\u00fcy\u00fck Bir Veri Kaz\u0131ma Projesi Nas\u0131l Y\u00f6netilir?<\/h2>\n<p>\u015eimdiye kadar belge kaz\u0131ma ve ayr\u0131\u015ft\u0131rman\u0131n temel kavramlar\u0131n\u0131, ara\u00e7lar\u0131n\u0131 ve ileri d\u00fczey tekniklerini inceledik. Ancak, t\u00fcm bu bilgiyi ger\u00e7ek bir projede bir araya getirmek, iyi bir planlama ve y\u00f6netim gerektirir. Bu b\u00f6l\u00fcmde, b\u00fcy\u00fck bir veri kaz\u0131ma projesinin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc, kar\u015f\u0131la\u015f\u0131labilecek zorluklar\u0131 ve bunlarla ba\u015fa \u00e7\u0131kma stratejilerini bir vaka analizi \u00fczerinden ele alaca\u011f\u0131z.<\/p>\n<h3>Senaryo: Bir Emlak Portal\u0131ndan T\u00fcm \u0130lanlar\u0131 \u00c7ekme Projesi<\/h3>\n<p>Bir emlak pazar analizi \u015firketi kurdu\u011funuzu ve T\u00fcrkiye&#8217;deki \u00f6nde gelen emlak portallar\u0131ndan (\u00f6rne\u011fin, Sahibinden.com, Emlakjet, Hepsiemlak) t\u00fcm sat\u0131l\u0131k ve kiral\u0131k ilanlar\u0131n\u0131 d\u00fczenli olarak toplaman\u0131z gerekti\u011fini varsayal\u0131m. Bu verilerle, b\u00f6lge baz\u0131nda fiyat e\u011filimleri, arz-talep dengesi ve pazar dinamikleri hakk\u0131nda detayl\u0131 raporlar olu\u015fturacaks\u0131n\u0131z.<\/p>\n<h4>1. Planlama ve Kapsam Belirleme<\/h4>\n<ul>\n<li><strong>Hedefler:<\/strong> Hangi emlak t\u00fcrleri (daire, villa, arsa), hangi b\u00f6lgeler, hangi veriler (fiyat, metrekare, oda say\u0131s\u0131, konum, ilan tarihi, a\u00e7\u0131klama, emlak\u00e7\u0131 bilgisi) toplanacak? Veri toplama s\u0131kl\u0131\u011f\u0131 ne olacak (g\u00fcnl\u00fck, haftal\u0131k)?<\/li>\n<li><strong>Yasalara Uygunluk ve Etik Kurallar:<\/strong> Her bir emlak portal\u0131n\u0131n <code>robots.txt<\/code> dosyas\u0131n\u0131 ve kullan\u0131m ko\u015fullar\u0131n\u0131 dikkatlice inceleyin. Kaz\u0131ma h\u0131z\u0131n\u0131 s\u0131n\u0131rlay\u0131n, ki\u015fisel verileri (ilan sahibinin do\u011frudan ileti\u015fim bilgileri gibi) toplamaktan ka\u00e7\u0131n\u0131n veya anonimle\u015ftirin. KVKK (Ki\u015fisel Verilerin Korunmas\u0131 Kanunu) ve GDPR (Genel Veri Koruma Y\u00f6netmeli\u011fi) uyumlulu\u011funu sa\u011flay\u0131n.<\/li>\n<li><strong>Kaynak Analizi:<\/strong> Her portal\u0131n web sitesi yap\u0131s\u0131n\u0131 (HTML\/DOM), dinamik i\u00e7erik kullan\u0131m\u0131n\u0131 (JavaScript ile y\u00fcklenen ilanlar), sayfalama (pagination) mekanizmalar\u0131n\u0131 ve olas\u0131 engelleme \u00f6nlemlerini (Captcha, IP engelleme) analiz edin.<\/li>\n<\/ul>\n<h4>2. Teknoloji Se\u00e7imi<\/h4>\n<ul>\n<li><strong>Kaz\u0131ma \u00c7er\u00e7evesi (Framework):<\/strong> B\u00fcy\u00fck \u00f6l\u00e7ekli, \u00e7ok kaynakl\u0131 ve d\u00fczenli kaz\u0131ma i\u00e7in Python tabanl\u0131 Scrapy gibi g\u00fc\u00e7l\u00fc bir framework tercih edin. Scrapy, e\u015fzamans\u0131z (asynchronous) yap\u0131s\u0131, middleware (ara yaz\u0131l\u0131m) deste\u011fi (proxy, user-agent rotasyonu i\u00e7in) ve \u00f6\u011fe boru hatt\u0131 (item pipeline) ile veri temizli\u011fi ve depolama entegrasyonu i\u00e7in idealdir.<\/li>\n<li><strong>Dinamik \u0130\u00e7erik \u0130\u00e7in:<\/strong> E\u011fer portallarda JavaScript ile y\u00fcklenen \u00e7ok say\u0131da dinamik ilan varsa, Scrapy ile entegre \u00e7al\u0131\u015fabilen Selenium veya Playwright gibi headless taray\u0131c\u0131 otomasyon ara\u00e7lar\u0131n\u0131 kullan\u0131n.<\/li>\n<li><strong>Veri Ayr\u0131\u015ft\u0131rma:<\/strong> Beautiful Soup (Scrapy ile birlikte kullan\u0131labilir), CSS se\u00e7iciler ve XPath, ilan detaylar\u0131n\u0131 ay\u0131klamak i\u00e7in kullan\u0131lacakt\u0131r.<\/li>\n<\/ul>\n<h4>3. Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma Geli\u015ftirme<\/h4>\n<ul>\n<li><strong>Spider Yaz\u0131m\u0131:<\/strong> Her emlak portal\u0131 i\u00e7in ayr\u0131 bir Scrapy &#8220;spider&#8221;\u0131 (\u00f6r\u00fcmcek) geli\u015ftirin. Bu spider&#8217;lar, ilan listeleme sayfalar\u0131n\u0131 gezecek, her bir ilan\u0131n detay sayfas\u0131n\u0131n URL&#8217;sini \u00e7\u0131karacak ve ard\u0131ndan detay sayfalar\u0131ndan fiyat, metrekare, oda say\u0131s\u0131 vb. bilgileri ay\u0131klayacakt\u0131r.<\/li>\n<li><strong>Hata Y\u00f6netimi:<\/strong> Ba\u011flant\u0131 hatalar\u0131, sayfa yap\u0131s\u0131 de\u011fi\u015fiklikleri, engellemeler gibi durumlar\u0131 ele almak i\u00e7in sa\u011flam hata i\u015fleme mekanizmalar\u0131 ekleyin. Tekrar deneme (retry) mant\u0131\u011f\u0131 uygulay\u0131n.<\/li>\n<li><strong>Veri Temizli\u011fi (Item Pipelines):<\/strong> Scrapy&#8217;nin item pipeline&#8217;lar\u0131n\u0131 kullanarak kaz\u0131nan verileri depolamadan \u00f6nce standartla\u015ft\u0131r\u0131n ve temizleyin. \u00d6rne\u011fin, fiyatlar\u0131 say\u0131sal formata d\u00f6n\u00fc\u015ft\u00fcr\u00fcn, metin alanlar\u0131ndaki bo\u015fluklar\u0131 kald\u0131r\u0131n.<\/li>\n<\/ul>\n<h4>4. Veri Depolama<\/h4>\n<ul>\n<li><strong>Veritaban\u0131 Se\u00e7imi:<\/strong> Yap\u0131land\u0131r\u0131lm\u0131\u015f emlak verileri i\u00e7in PostgreSQL veya MySQL gibi ili\u015fkisel bir veritaban\u0131 (SQL) tercih edilebilir. Bu veritabanlar\u0131, karma\u015f\u0131k sorgulamalar ve indeksleme i\u00e7in uygundur.<\/li>\n<li><strong>Veri Modeli:<\/strong> Emlak ilanlar\u0131n\u0131n \u00f6zelliklerini (adres, fiyat, metrekare, ilan tarihi, emlak\u00e7\u0131 bilgisi vb.) i\u00e7eren bir veritaban\u0131 \u015femas\u0131 tasarlay\u0131n.<\/li>\n<li><strong>G\u00fcncelleme Stratejisi:<\/strong> Yeni ilanlar\u0131 ekleyin, mevcut ilanlar\u0131n fiyat de\u011fi\u015fikliklerini g\u00fcncelleyin ve listeden kald\u0131r\u0131lan ilanlar\u0131 i\u015faretleyin. Her kaz\u0131mada t\u00fcm veriyi silip yeniden y\u00fcklemek yerine, sadece de\u011fi\u015fiklikleri i\u015fleyen bir &#8220;upsert&#8221; (g\u00fcncelle veya ekle) stratejisi uygulay\u0131n.<\/li>\n<\/ul>\n<h4>5. Bak\u0131m ve G\u00fcncelleme<\/h4>\n<ul>\n<li><strong>Zamanlama (Scheduling):<\/strong> Kaz\u0131ma g\u00f6revlerini d\u00fczenli aral\u0131klarla (\u00f6rne\u011fin, her gece) \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir g\u00f6rev zamanlay\u0131c\u0131 (\u00f6rne\u011fin, Linux&#8217;ta Cron, Windows&#8217;ta G\u00f6rev Zamanlay\u0131c\u0131 veya bulut tabanl\u0131 zamanlay\u0131c\u0131 servisleri) kullan\u0131n.<\/li>\n<li><strong>\u0130zleme ve Alarm:<\/strong> Kaz\u0131ma s\u00fcre\u00e7lerini izleyin (ba\u015far\u0131l\u0131\/ba\u015far\u0131s\u0131z istekler, kaz\u0131nan veri miktar\u0131). Hata durumlar\u0131nda veya performans d\u00fc\u015f\u00fc\u015flerinde sizi uyaracak bir alarm sistemi kurun.<\/li>\n<li><strong>Yap\u0131sal De\u011fi\u015fikliklere Uyum:<\/strong> Web sitelerinin yap\u0131lar\u0131 zamanla de\u011fi\u015febilir. Bu de\u011fi\u015fiklikler, kaz\u0131ma kodunuzun bozulmas\u0131na neden olabilir. Bu nedenle, d\u00fczenli olarak sitelerin yap\u0131s\u0131n\u0131 kontrol edin ve kaz\u0131ma kodunuzu g\u00fcncelleyin. Bu, s\u00fcrekli bir bak\u0131m gerektiren bir s\u00fcre\u00e7tir.<\/li>\n<li><strong>IP Havuzu Y\u00f6netimi:<\/strong> Engellemelerle kar\u015f\u0131la\u015fmamak i\u00e7in proxy havuzunuzu d\u00fczenli olarak g\u00fcncelleyin ve yeni, temiz IP&#8217;ler ekleyin.<\/li>\n<\/ul>\n<h4>Kar\u015f\u0131la\u015f\u0131lan Zorluklar ve \u00c7\u00f6z\u00fcmler<\/h4>\n<ul>\n<li><strong>Zorluk:<\/strong> Bir portal s\u0131k s\u0131k IP adreslerini engelliyor.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> Daha b\u00fcy\u00fck ve daha dinamik bir proxy havuzu kullan\u0131n. \u0130stekler aras\u0131na daha uzun ve rastgele gecikmeler ekleyin. Headless taray\u0131c\u0131 kullan\u0131yorsan\u0131z, taray\u0131c\u0131 parmak izini gizleme tekniklerini uygulay\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Zorluk:<\/strong> Baz\u0131 ilanlar JavaScript ile dinamik olarak y\u00fckleniyor ve do\u011frudan HTML&#8217;de g\u00f6r\u00fcnm\u00fcyor.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> Selenium veya Playwright gibi headless taray\u0131c\u0131lar\u0131 Scrapy ile entegre ederek bu ilanlar\u0131 y\u00fckleyin ve ard\u0131ndan ayr\u0131\u015ft\u0131rma yap\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Zorluk:<\/strong> Bir portal\u0131n HTML yap\u0131s\u0131 s\u0131k s\u0131k de\u011fi\u015fiyor, bu da ayr\u0131\u015ft\u0131rma kodunuzu bozuyor.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> Daha esnek CSS se\u00e7iciler veya XPath ifadeleri kullanmaya \u00e7al\u0131\u015f\u0131n. M\u00fcmk\u00fcnse, daha kararl\u0131 ve genel elementleri hedefleyin. E\u011fer de\u011fi\u015fim \u00e7ok s\u0131k ve radikalse, makine \u00f6\u011frenimi tabanl\u0131 ayr\u0131\u015ft\u0131rma yakla\u015f\u0131mlar\u0131n\u0131 de\u011ferlendirin.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Zorluk:<\/strong> Toplanan veride tutars\u0131zl\u0131klar ve eksiklikler var.\n<ul>\n<li><strong>\u00c7\u00f6z\u00fcm:<\/strong> Veri temizli\u011fi ve do\u011frulama a\u015famalar\u0131n\u0131 daha detayl\u0131 hale getirin. Gerekirse, eksik verileri tamamlamak i\u00e7in ek kaz\u0131ma veya tahmin algoritmalar\u0131 kullan\u0131n.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>B\u00fcy\u00fck bir veri kaz\u0131ma projesi, sadece teknik bir geli\u015ftirme de\u011fil, ayn\u0131 zamanda s\u00fcrekli izleme, bak\u0131m ve adaptasyon gerektiren dinamik bir s\u00fcre\u00e7tir. Do\u011fru ara\u00e7lar\u0131 se\u00e7mek, etik kurallara uymak ve esnek bir yakla\u015f\u0131ma sahip olmak, projenin ba\u015far\u0131s\u0131 i\u00e7in anahtard\u0131r.<\/p>\n<h2>Sonu\u00e7: Gelecekte Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma<\/h2>\n<p>Belge kaz\u0131ma ve ayr\u0131\u015ft\u0131rma \u00e7\u00f6z\u00fcmleri, dijital \u00e7a\u011f\u0131n sundu\u011fu s\u0131n\u0131rs\u0131z veri kayna\u011f\u0131ndan anlaml\u0131 bilgiler \u00e7\u0131karma yetene\u011fiyle i\u015fletmeler ve bireyler i\u00e7in vazge\u00e7ilmez ara\u00e7lar haline gelmi\u015ftir. Bu makale boyunca, web sayfalar\u0131ndan yap\u0131sal olmayan belgelere kadar farkl\u0131 kaynaklardan veri toplaman\u0131n ve i\u015flemenin temel prensiplerini, pop\u00fcler ara\u00e7lar\u0131n\u0131 ve ileri d\u00fczey tekniklerini ad\u0131m ad\u0131m ele ald\u0131k. G\u00f6rd\u00fck ki, bu s\u00fcre\u00e7 sadece teknik bir uygulama de\u011fil, ayn\u0131 zamanda etik sorumluluklar, yasal uyumluluk ve s\u00fcrekli bak\u0131m gerektiren kapsaml\u0131 bir disiplindir.<\/p>\n<p>Gelecekte, yapay zeka ve otomasyonun belge kaz\u0131ma ve ayr\u0131\u015ft\u0131rma alan\u0131ndaki rol\u00fc daha da artacakt\u0131r. Makine \u00f6\u011frenimi algoritmalar\u0131, de\u011fi\u015fen web sitesi yap\u0131lar\u0131na daha h\u0131zl\u0131 adapte olabilen, daha ak\u0131ll\u0131 ayr\u0131\u015ft\u0131rma yapabilen ve hatta Captcha gibi engelleri daha verimli bir \u015fekilde a\u015fabilen sistemler geli\u015ftirmemizi sa\u011flayacakt\u0131r. \u00d6zellikle bulut tabanl\u0131 AI hizmetleri (\u00f6rne\u011fin, OCR ve do\u011fal dil i\u015fleme i\u00e7in), bu s\u00fcre\u00e7leri daha eri\u015filebilir ve g\u00fc\u00e7l\u00fc hale getirecektir. Daha az kod yazarak, daha fazla veriyi daha do\u011fru bir \u015fekilde i\u015fleyebilece\u011fimiz \u00e7\u00f6z\u00fcmler yayg\u0131nla\u015facakt\u0131r. Veri g\u00fcvenli\u011fi ve gizlili\u011fi konular\u0131 ise her zamankinden daha fazla \u00f6nem ta\u015f\u0131yacak, bu teknolojileri kullananlar\u0131n yasal d\u00fczenlemelere uyumu daha s\u0131k\u0131 denetlenecektir.<\/p>\n<p>Veri odakl\u0131 kararlar alman\u0131n kritik oldu\u011fu bu d\u00f6nemde, belge kaz\u0131ma ve ayr\u0131\u015ft\u0131rma becerileri, rekabet avantaj\u0131 elde etmek ve i\u015f zekas\u0131n\u0131 geli\u015ftirmek isteyen herkes i\u00e7in temel bir yetkinlik olmaya devam edecektir. Bu yetenekleri geli\u015ftirerek, siz de dijital d\u00fcnyan\u0131n sundu\u011fu bilgi hazinesinden en iyi \u015fekilde faydalanabilirsiniz. \u015eimdi s\u0131ra sizde: Kendi veri projelerinizi ba\u015flatmak ve bu g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 ke\u015ffetmek i\u00e7in ilk ad\u0131m\u0131 at\u0131n!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li><strong>Web kaz\u0131ma yasal m\u0131d\u0131r?<\/strong>\n<p>Web kaz\u0131ma, genel olarak yasa d\u0131\u015f\u0131 de\u011fildir, ancak sitenin <code>robots.txt<\/code> dosyas\u0131na, kullan\u0131m ko\u015fullar\u0131na ve telif haklar\u0131 ile ki\u015fisel verilerin korunmas\u0131 (KVKK\/GDPR) yasalar\u0131na uymak zorunludur. Ki\u015fisel veri i\u00e7eren bilgileri izinsiz toplamak veya siteye zarar verecek \u015fekilde a\u015f\u0131r\u0131 y\u00fcklenmek yasa d\u0131\u015f\u0131d\u0131r.<\/p>\n<\/li>\n<li><strong>Dinamik i\u00e7erikli sitelerden veri kaz\u0131mak neden daha zor?<\/strong>\n<p>Dinamik i\u00e7erikli siteler, sayfa y\u00fcklendikten sonra JavaScript kullanarak i\u00e7eri\u011fi olu\u015fturur. Geleneksel kaz\u0131ma y\u00f6ntemleri sadece ilk HTML&#8217;i indirdi\u011fi i\u00e7in bu i\u00e7eri\u011fi g\u00f6remez. Bu y\u00fczden, JavaScript&#8217;i \u00e7al\u0131\u015ft\u0131rabilen ve sayfan\u0131n tamamen y\u00fcklenmesini bekleyebilen Selenium veya Playwright gibi taray\u0131c\u0131 otomasyon ara\u00e7lar\u0131 gereklidir.<\/p>\n<\/li>\n<li><strong>Kaz\u0131nan veriyi nas\u0131l temizlerim ve d\u00fczenlerim?<\/strong>\n<p>Kaz\u0131nan veriyi temizlemek ve d\u00fczenlemek i\u00e7in Python&#8217;da Pandas k\u00fct\u00fcphanesi gibi ara\u00e7lar kullan\u0131labilir. Tekrarlar\u0131 giderme, eksik de\u011ferleri doldurma, format d\u00f6n\u00fc\u015ft\u00fcrme, metin temizli\u011fi ve anormal de\u011ferleri d\u00fczeltme gibi teknikler uygulan\u0131r. Bu s\u00fcre\u00e7, veriyi analiz i\u00e7in anlaml\u0131 ve g\u00fcvenilir hale getirir.<\/p>\n<\/li>\n<li><strong>IP engellemeleriyle nas\u0131l ba\u015fa \u00e7\u0131kabilirim?<\/strong>\n<p>IP engellemeleriyle ba\u015fa \u00e7\u0131kmak i\u00e7in proxy&#8217;ler, VPN&#8217;ler veya rotasyonlu proxy servisleri kullanabilirsiniz. Ayr\u0131ca, istekler aras\u0131na rastgele gecikmeler eklemek ve farkl\u0131 User-Agent (taray\u0131c\u0131 tan\u0131mlay\u0131c\u0131s\u0131) kullanmak da bot olarak alg\u0131lanma riskini azalt\u0131r.<\/p>\n<\/li>\n<li><strong>Hangi durumlarda web kaz\u0131ma yerine API kullanmal\u0131y\u0131m?<\/strong>\n<p>E\u011fer bir web sitesi veya hizmet, ihtiyac\u0131n\u0131z olan verilere eri\u015fim sa\u011flayan resmi bir API sunuyorsa, her zaman web kaz\u0131ma yerine API kullanmay\u0131 tercih etmelisiniz. API&#8217;ler, yasal, daha g\u00fcvenilir, daha h\u0131zl\u0131 ve yap\u0131land\u0131r\u0131lm\u0131\u015f veri sa\u011flar ve site sahibinin kaynaklar\u0131na daha az y\u00fck bindirir.<\/p>\n<\/li>\n<\/ol>\n<p>#BelgeKaz\u0131ma #VeriAyr\u0131\u015ft\u0131rma #WebScraping #DataParsing #Python #NLP #OCR #VeriBilimi #Teknoloji #WebGeli\u015ftirme<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/python-web-scraping-standard-library\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/python-web-scraping-standard-library<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda, i\u015fletmeler ve bireyler, internetin ve \u00e7e\u015fitli dijital belgelerin sundu\u011fu muazzam veri okyanusunda y\u00fczmektedir.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-45278","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda, i\u015fletmeler ve bireyler, internetin ve \u00e7e\u015fitli dijital belgelerin sundu\u011fu muazzam veri okyanusunda y\u00fczmektedir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-19T18:15:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-19T18:15:47+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"40 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131\",\"datePublished\":\"2026-10-19T18:15:02+00:00\",\"dateModified\":\"2026-10-19T18:15:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/\"},\"wordCount\":7130,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/\",\"name\":\"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-10-19T18:15:02+00:00\",\"dateModified\":\"2026-10-19T18:15:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/","og_locale":"tr_TR","og_type":"article","og_title":"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131","og_description":"G\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda, i\u015fletmeler ve bireyler, internetin ve \u00e7e\u015fitli dijital belgelerin sundu\u011fu muazzam veri okyanusunda y\u00fczmektedir.","og_url":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-10-19T18:15:02+00:00","article_modified_time":"2026-10-19T18:15:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"40 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131","datePublished":"2026-10-19T18:15:02+00:00","dateModified":"2026-10-19T18:15:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/"},"wordCount":7130,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/","url":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/","name":"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-10-19T18:15:02+00:00","dateModified":"2026-10-19T18:15:47+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/belge-kazima-ve-ayristirma-cozumleri-veriye-erisimin-yeni-yollari\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Belge Kaz\u0131ma ve Ayr\u0131\u015ft\u0131rma \u00c7\u00f6z\u00fcmleri: Veriye Eri\u015fimin Yeni Yollar\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45278","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=45278"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45278\/revisions"}],"predecessor-version":[{"id":45279,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45278\/revisions\/45279"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=45278"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=45278"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=45278"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}