{"id":45619,"date":"2026-11-10T09:01:14","date_gmt":"2026-11-10T06:01:14","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/"},"modified":"2026-11-10T09:03:16","modified_gmt":"2026-11-10T06:03:16","slug":"python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/","title":{"rendered":"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma"},"content":{"rendered":"<h2>Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma<\/h2>\n<p>Amerika Birle\u015fik Devletleri&#8217;nde faaliyet g\u00f6steren nakliye \u015firketlerinin g\u00fcvenilirli\u011fi ve performans\u0131n\u0131 anlamak, sekt\u00f6rdeki bir\u00e7ok payda\u015f i\u00e7in kritik \u00f6neme sahiptir. Ancak, bu bilgilere ula\u015fmak genellikle zahmetli ve zaman al\u0131c\u0131 olabilir. Federal Motor Ta\u015f\u0131y\u0131c\u0131 G\u00fcvenlik \u0130daresi (FMCSA) web sitesi, bu verilerin \u00f6nemli bir kayna\u011f\u0131d\u0131r. Peki, bu verileri programatik olarak nas\u0131l \u00e7ekebilir ve analiz edebiliriz? Bu makalede, Python ve Playwright kullanarak FMCSA verilerini g\u00fcvenilir bir \u015fekilde kaz\u0131yacak bir sistem kurman\u0131n inceliklerini ad\u0131m ad\u0131m ele alaca\u011f\u0131z. Otomotiv sekt\u00f6r\u00fcnden sigorta \u015firketlerine, finans kurulu\u015flar\u0131ndan lojistik firmalar\u0131na kadar geni\u015f bir yelpazede bu verilere ihtiya\u00e7 duyanlar i\u00e7in bu rehber, veri toplama s\u00fcre\u00e7lerini otomatikle\u015ftirmelerine yard\u0131mc\u0131 olacakt\u0131r. Karma\u015f\u0131k web sitelerinden veri \u00e7ekme ihtiyac\u0131n\u0131z oldu\u011funda, Playwright gibi modern ara\u00e7lar size g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h2>FMCSA Veri Kaz\u0131ma Neden \u00d6nemli?<\/h2>\n<p>FMCSA, Amerika&#8217;daki ticari motorlu ta\u015f\u0131tlar\u0131n g\u00fcvenli\u011fi ve uyumlulu\u011fu hakk\u0131nda kapsaml\u0131 bilgiler sunan bir devlet kurumudur. Bu veriler, nakliye \u015firketlerinin g\u00fcvenlik kay\u0131tlar\u0131, denetim sonu\u00e7lar\u0131, kaza istatistikleri ve s\u00fcr\u00fcc\u00fc bilgilerini i\u00e7erir. Bu t\u00fcr bilgilere eri\u015fim, i\u015f d\u00fcnyas\u0131 i\u00e7in bir dizi stratejik avantaj sa\u011flar. \u00d6rne\u011fin, bir sigorta \u015firketi, potansiyel m\u00fc\u015fterilerinin risk profilini de\u011ferlendirmek i\u00e7in FMCSA verilerini kullanabilir. Bir finans kurumu, nakliye \u015firketlerine kredi verirken onlar\u0131n finansal ve operasyonel sa\u011fl\u0131\u011f\u0131n\u0131 anlamak i\u00e7in bu verilere ba\u015fvurabilir. Lojistik firmalar\u0131 ise tedarik zinciri ortaklar\u0131n\u0131n performans\u0131n\u0131 izleyerek daha bilin\u00e7li kararlar alabilir. Ancak, FMCSA web sitesi gibi b\u00fcy\u00fck ve dinamik veri setlerine sahip platformlardan bilgi toplamak, manuel olarak yap\u0131ld\u0131\u011f\u0131nda inan\u0131lmaz derecede yorucu ve hataya a\u00e7\u0131k olabilir. Bu noktada, otomatik veri kaz\u0131ma (data scraping) devreye girer. Python&#8217;un esnekli\u011fi ve Playwright&#8217;in sundu\u011fu modern taray\u0131c\u0131 otomasyon yetenekleri ile bu s\u00fcreci hem verimli hem de g\u00fcvenilir hale getirebiliriz. Bu s\u00fcre\u00e7, sadece veri toplamakla kalmaz, ayn\u0131 zamanda b\u00fcy\u00fck veri setlerini analiz ederek de\u011ferli i\u00e7g\u00f6r\u00fcler elde etme kap\u0131s\u0131n\u0131 da aralar. Bu nedenle, FMCSA verilerini etkin bir \u015fekilde kaz\u0131mak, rekabet avantaj\u0131 elde etmek ve riskleri minimize etmek i\u00e7in stratejik bir ad\u0131md\u0131r. Otomatikle\u015ftirilmi\u015f bir sistem, s\u00fcrekli g\u00fcncellenen verilere h\u0131zl\u0131ca eri\u015fmenizi sa\u011flayarak piyasa de\u011fi\u015fikliklerine daha \u00e7abuk adapte olman\u0131za olanak tan\u0131r.<\/p>\n<h2>Neden Python ve Playwright?<\/h2>\n<p>Python, veri bilimi, web geli\u015ftirme ve otomasyon alanlar\u0131ndaki pop\u00fclerli\u011fi sayesinde veri kaz\u0131ma projeleri i\u00e7in m\u00fckemmel bir se\u00e7imdir. Geni\u015f k\u00fct\u00fcphane ekosistemi (\u00f6rne\u011fin, <code>requests<\/code>, <code>BeautifulSoup<\/code>, <code>pandas<\/code>) veri i\u015fleme ve analizini kolayla\u015ft\u0131r\u0131r. Ancak, modern web siteleri genellikle JavaScript ile dinamik olarak y\u00fcklenen i\u00e7eriklere sahiptir. Bu t\u00fcr sitelerde geleneksel k\u00fct\u00fcphaneler yetersiz kalabilir. \u0130\u015fte tam bu noktada Playwright devreye girer. Playwright, Chromium, Firefox ve WebKit gibi modern taray\u0131c\u0131lar\u0131 kontrol etmenizi sa\u011flayan bir Node.js k\u00fct\u00fcphanesidir ve Python i\u00e7in de g\u00fc\u00e7l\u00fc bir API sunar. Playwright&#8217;in en b\u00fcy\u00fck avantajlar\u0131 \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Ger\u00e7ek Taray\u0131c\u0131 Otomasyonu:<\/strong> Playwright, ger\u00e7ek taray\u0131c\u0131lar \u00fczerinde \u00e7al\u0131\u015f\u0131r. Bu, JavaScript&#8217;in y\u00fcr\u00fct\u00fcld\u00fc\u011f\u00fc, sayfa \u00f6\u011felerinin dinamik olarak y\u00fcklendi\u011fi ve kullan\u0131c\u0131 etkile\u015fimlerinin sim\u00fcle edildi\u011fi karma\u015f\u0131k web sitelerini sorunsuz bir \u015fekilde kaz\u0131man\u0131za olanak tan\u0131r.<\/li>\n<li><strong>H\u0131z ve Performans:<\/strong> Playwright, paralel taray\u0131c\u0131 \u00f6rnekleri \u00e7al\u0131\u015ft\u0131rma yetene\u011fi sayesinde olduk\u00e7a h\u0131zl\u0131d\u0131r. Bu, b\u00fcy\u00fck veri setlerini toplarken s\u00fcreyi \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r.<\/li>\n<li><strong>G\u00fcvenilirlik:<\/strong> Dinamik i\u00e7eriklerin y\u00fcklenmesini bekleyebilmesi, \u00f6\u011felerin g\u00f6r\u00fcn\u00fcr olmas\u0131n\u0131 kontrol edebilmesi gibi \u00f6zellikleri sayesinde Playwright, daha g\u00fcvenilir veri kaz\u0131ma sonu\u00e7lar\u0131 elde etmenizi sa\u011flar.<\/li>\n<li><strong>\u00c7ok Y\u00f6nl\u00fcl\u00fck:<\/strong> Sadece veri kaz\u0131ma de\u011fil, ayn\u0131 zamanda web otomasyonu, test otomasyonu gibi bir\u00e7ok farkl\u0131 senaryo i\u00e7in de kullan\u0131labilir.<\/li>\n<li><strong>Kolay Kullan\u0131m:<\/strong> Python API&#8217;si, Python geli\u015ftiricileri i\u00e7in \u00f6\u011frenmesi ve uygulamas\u0131 kolay bir yap\u0131 sunar.<\/li>\n<\/ul>\n<p>Bu \u00f6zellikler, FMCSA gibi karma\u015f\u0131k ve dinamik web sitelerinden veri \u00e7ekerken Playwright&#8217;i vazge\u00e7ilmez k\u0131lar. Python&#8217;un veri i\u015fleme yetenekleri ile Playwright&#8217;in taray\u0131c\u0131 otomasyon g\u00fcc\u00fcn\u00fc birle\u015ftirdi\u011fimizde, son derece g\u00fc\u00e7l\u00fc ve esnek bir veri kaz\u0131y\u0131c\u0131 olu\u015fturabiliriz. Bu kombinasyon, sadece veri toplama i\u015flemini otomatikle\u015ftirmekle kalmaz, ayn\u0131 zamanda elde edilen verilerin do\u011frulu\u011funu ve b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc de garanti alt\u0131na al\u0131r. \u00d6rne\u011fin, bir web sayfas\u0131n\u0131n y\u00fcklenmesi birka\u00e7 saniye s\u00fcrebilir ve bu s\u00fcre zarf\u0131nda JavaScript kodlar\u0131 \u00e7al\u0131\u015farak i\u00e7eri\u011fi olu\u015fturur. Playwright, bu bekleme s\u00fcrelerini ak\u0131ll\u0131ca y\u00f6neterek, sayfan\u0131n tamamen haz\u0131r oldu\u011fundan emin olur ve ard\u0131ndan verileri \u00e7eker. Bu, geleneksel y\u00f6ntemlerle elde edilemeyecek bir g\u00fcvenilirlik seviyesi sunar.<\/p>\n<h2>Kurulum ve Gerekli Ara\u00e7lar<\/h2>\n<p>Bu projeye ba\u015flamadan \u00f6nce bilgisayar\u0131n\u0131zda baz\u0131 temel ara\u00e7lar\u0131n kurulu olmas\u0131 gerekmektedir. \u0130lk ad\u0131m olarak, Python&#8217;un en son s\u00fcr\u00fcm\u00fcn\u00fc resmi web sitesinden indirip kurman\u0131z \u00f6nemlidir. Python kurulumu s\u0131ras\u0131nda, &#8220;Add Python to PATH&#8221; se\u00e7ene\u011fini i\u015faretlemeyi unutmay\u0131n. Bu, komut istemcisinden (Command Prompt veya Terminal) Python komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rabilmeniz i\u00e7in gereklidir. Kurulum tamamland\u0131ktan sonra, bir sanal ortam (virtual environment) olu\u015fturmak iyi bir pratiktir. Sanal ortamlar, projenize \u00f6zel k\u00fct\u00fcphaneleri izole etmenizi sa\u011flar ve farkl\u0131 projeler aras\u0131nda k\u00fct\u00fcphane \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nler. Komut istemcisini a\u00e7\u0131p projenizin olmas\u0131n\u0131 istedi\u011finiz dizine gidin ve \u015fu komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\npython -m venv venv\n    <\/code><\/pre>\n<p>Bu komut, <code>venv<\/code> ad\u0131nda bir sanal ortam olu\u015fturacakt\u0131r. Ard\u0131ndan, bu sanal ortam\u0131 etkinle\u015ftirmeniz gerekir:<\/p>\n<p>Windows i\u00e7in:<\/p>\n<pre><code>\nvenv\\Scripts\\activate\n    <\/code><\/pre>\n<p>macOS ve Linux i\u00e7in:<\/p>\n<pre><code>\nsource venv\/bin\/activate\n    <\/code><\/pre>\n<p>Sanal ortam etkinle\u015ftirildikten sonra, komut istemcisinin ba\u015f\u0131nda <code>(venv)<\/code> ifadesini g\u00f6receksiniz. \u015eimdi Playwright ve di\u011fer gerekli k\u00fct\u00fcphaneleri kurabiliriz. Komut istemcisinde a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\npip install playwright pandas\n    <\/code><\/pre>\n<p>Bu komut, Playwright ve veri i\u015fleme i\u00e7in kullanaca\u011f\u0131m\u0131z Pandas k\u00fct\u00fcphanesini kuracakt\u0131r. Playwright&#8217;in taray\u0131c\u0131lar\u0131 indirmesi i\u00e7in ek bir ad\u0131ma ihtiyac\u0131m\u0131z var:<\/p>\n<pre><code>\nplaywright install\n    <\/code><\/pre>\n<p>Bu komut, Playwright&#8217;in destekledi\u011fi taray\u0131c\u0131lar\u0131n (Chromium, Firefox, WebKit) en son s\u00fcr\u00fcmlerini indirir. Art\u0131k projeniz i\u00e7in gerekli t\u00fcm altyap\u0131 haz\u0131r. Bu kurulum ad\u0131mlar\u0131, projenizin temiz ve organize bir \u015fekilde ba\u015flamas\u0131n\u0131 sa\u011flar. Sanal ortam kullan\u0131m\u0131, gelecekte kar\u015f\u0131la\u015fabilece\u011finiz potansiyel ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131 da engeller. Ayr\u0131ca, <code>pandas<\/code> k\u00fct\u00fcphanesinin kurulmas\u0131, toplad\u0131\u011f\u0131n\u0131z verileri daha sonra kolayca analiz etmenize ve raporlaman\u0131za olanak tan\u0131yacakt\u0131r.<\/p>\n<h2>FMCSA Web Sitesini Anlamak ve Veri Yap\u0131s\u0131<\/h2>\n<p>FMCSA web sitesi, nakliye \u015firketleri hakk\u0131nda detayl\u0131 bilgiler bar\u0131nd\u0131ran zengin bir kaynakt\u0131r. Ancak, bu verilerin yap\u0131sal olarak anla\u015f\u0131lmas\u0131, etkili bir kaz\u0131y\u0131c\u0131 (scraper) geli\u015ftirmek i\u00e7in ilk ad\u0131md\u0131r. Genellikle, FMCSA&#8217;n\u0131n sundu\u011fu temel bilgiler \u015funlar\u0131 i\u00e7erir:<\/p>\n<ul>\n<li><strong>USDOT Numaras\u0131:<\/strong> Her nakliye \u015firketine verilen benzersiz bir tan\u0131mlay\u0131c\u0131d\u0131r.<\/li>\n<li><strong>\u015eirket Ad\u0131 ve Adresi:<\/strong> \u015eirketin yasal ad\u0131 ve kay\u0131tl\u0131 adresi.<\/li>\n<li><strong>Operasyon T\u00fcr\u00fc:<\/strong> Ta\u015f\u0131mac\u0131l\u0131k t\u00fcr\u00fc (\u00f6rne\u011fin, uluslararas\u0131, eyaletler aras\u0131, yerel).<\/li>\n<li><strong>Ta\u015f\u0131ma T\u00fcr\u00fc:<\/strong> Ta\u015f\u0131nan mallar\u0131n t\u00fcr\u00fc (\u00f6rne\u011fin, tehlikeli madde, genel kargo, canl\u0131 hayvan).<\/li>\n<li><strong>G\u00fcvenlik Derecelendirmesi:<\/strong> \u015eirketin g\u00fcvenlik performans\u0131 (genellikle &#8220;Satisfactory&#8221;, &#8220;Unsatisfactory&#8221; gibi).<\/li>\n<li><strong>Denetim Kay\u0131tlar\u0131:<\/strong> Yap\u0131lan denetimlerin tarihleri, sonu\u00e7lar\u0131 ve ihlaller.<\/li>\n<li><strong>Kaza Kay\u0131tlar\u0131:<\/strong> \u015eirketle ili\u015fkilendirilen kazalar\u0131n detaylar\u0131.<\/li>\n<li><strong>S\u00fcr\u00fcc\u00fc Bilgileri:<\/strong> S\u00fcr\u00fcc\u00fclerin lisans durumu ve ge\u00e7mi\u015fi (bu bilgilere eri\u015fim, gizlilik politikalar\u0131 nedeniyle daha k\u0131s\u0131tl\u0131 olabilir).<\/li>\n<\/ul>\n<p>Bu verileri kaz\u0131mak i\u00e7in \u00f6ncelikle FMCSA web sitesinin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamak gerekir. Genellikle, belirli bir USDOT numaras\u0131 veya \u015firket ad\u0131 ile arama yap\u0131ld\u0131\u011f\u0131nda, ilgili bilgiler bir tablo veya ayr\u0131nt\u0131l\u0131 bir profil sayfas\u0131nda sunulur. Bu sayfalar\u0131n HTML yap\u0131s\u0131n\u0131 incelemek, hangi \u00f6\u011felerin hangi veriyi i\u00e7erdi\u011fini belirlemek a\u00e7\u0131s\u0131ndan kritiktir. Taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131n\u0131 (Developer Tools) kullanarak sayfan\u0131n kaynak kodunu inceleyebilirsiniz. \u00d6zellikle, arama formlar\u0131n\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131, sonu\u00e7lar\u0131n hangi HTML etiketleri (<code>div<\/code>, <code>table<\/code>, <code>tr<\/code>, <code>td<\/code>, <code>span<\/code> vb.) i\u00e7inde sunuldu\u011fu ve bu \u00f6\u011felerin benzersiz kimlikleri (ID) veya s\u0131n\u0131flar\u0131 (class) olup olmad\u0131\u011f\u0131na dikkat edin. FMCSA web sitesi, zaman zaman g\u00fcncellenebilece\u011fi i\u00e7in, kaz\u0131y\u0131c\u0131n\u0131z\u0131n esnek olmas\u0131 ve olas\u0131 yap\u0131sal de\u011fi\u015fikliklere uyum sa\u011flayabilmesi \u00f6nemlidir. Veri kaz\u0131ma i\u015flemi s\u0131ras\u0131nda, sayfa numaraland\u0131rma, filtreleme veya s\u0131ralama gibi \u00f6zelliklerin nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 da anlamak, t\u00fcm verilere eri\u015fim sa\u011flamak i\u00e7in gereklidir. \u00d6rne\u011fin, bir arama sonucunda onlarca sayfa varsa, kaz\u0131y\u0131c\u0131n\u0131z\u0131n bu sayfalar aras\u0131nda otomatik olarak gezinmesi gerekebilir. Bu, genellikle &#8220;Sonraki Sayfa&#8221; d\u00fc\u011fmesini bulup t\u0131klayarak veya sayfa numaras\u0131 parametrelerini URL&#8217;ye ekleyerek yap\u0131l\u0131r. Bu yap\u0131sal analiz, kodlama a\u015famas\u0131nda kar\u015f\u0131la\u015f\u0131lacak zorluklar\u0131 \u00f6ng\u00f6rmenize ve daha sa\u011flam bir \u00e7\u00f6z\u00fcm geli\u015ftirmenize yard\u0131mc\u0131 olur.<\/p>\n<h2>\u0130lk Kaz\u0131y\u0131c\u0131y\u0131 Olu\u015fturma: Temel Ad\u0131mlar<\/h2>\n<p>Art\u0131k temel kurulumlar\u0131 tamamlad\u0131k ve FMCSA web sitesinin yap\u0131s\u0131n\u0131 anlad\u0131k. \u015eimdi ilk basit Playwright tabanl\u0131 kaz\u0131y\u0131c\u0131m\u0131z\u0131 olu\u015fturmaya ba\u015flayabiliriz. Bu \u00f6rnekte, belirli bir USDOT numaras\u0131na sahip bir \u015firketin temel bilgilerini \u00e7ekece\u011fiz. \u00d6nce, Python dosyan\u0131z\u0131 olu\u015fturun (\u00f6rne\u011fin, <code>fmcsa_scraper.py<\/code>). Ard\u0131ndan, Playwright&#8217;i kullanarak bir taray\u0131c\u0131 \u00f6rne\u011fi ba\u015flatacak ve FMCSA web sitesine gidece\u011fiz.<\/p>\n<pre><code>\nfrom playwright.sync_api import sync_playwright\nimport pandas as pd\n\ndef scrape_company_info(usdot_number):\n    with sync_playwright() as p:\n        browser = p.chromium.launch(headless=True) # headless=True arka planda \u00e7al\u0131\u015ft\u0131r\u0131r\n        page = browser.new_page()\n        \n        # FMCSA arama sayfas\u0131n\u0131n URL'si (Bu URL zamanla de\u011fi\u015febilir, g\u00fcncel URL'yi kontrol edin)\n        search_url = \"https:\/\/safer.fmcsa.dot.gov\/CompanySearch\/AdvCtrl_Query.asp\" \n        page.goto(search_url)\n\n        # USDOT numaras\u0131 alan\u0131n\u0131 bulup de\u011feri giriyoruz\n        # Sayfa yap\u0131s\u0131n\u0131 inceleyerek do\u011fru selector'\u0131 bulmal\u0131s\u0131n\u0131z.\n        # Bu selector \u00f6rnek ama\u00e7l\u0131d\u0131r ve g\u00fcncel web sitesi yap\u0131s\u0131na g\u00f6re de\u011fi\u015febilir.\n        page.fill(\"input[name='query_USDOF_NUMBER']\", usdot_number) \n\n        # Arama butonunu bulup t\u0131kl\u0131yoruz\n        # Button selector'\u0131 da sayfa yap\u0131s\u0131na g\u00f6re de\u011fi\u015febilir.\n        page.click(\"input[value='Search']\")\n\n        # Arama sonu\u00e7lar\u0131n\u0131n y\u00fcklenmesini bekliyoruz\n        # Sayfada belirli bir \u00f6\u011fenin g\u00f6r\u00fcn\u00fcr olmas\u0131n\u0131 beklemek g\u00fcvenlidir.\n        # \u00d6rne\u011fin, sonu\u00e7 tablosunun ilk sat\u0131r\u0131n\u0131 bekleyebiliriz.\n        page.wait_for_selector(\"table.table-bordered tr\") \n\n        # \u015eirket bilgilerini i\u00e7eren tabloyu buluyoruz\n        # Bu selector da web sitesinin yap\u0131s\u0131na g\u00f6re de\u011fi\u015febilir.\n        company_table = page.query_selector(\"table.table-bordered\")\n\n        if company_table:\n            # Tablo sat\u0131rlar\u0131n\u0131 al\u0131yoruz\n            rows = company_table.query_selector_all(\"tr\")\n            company_data = {}\n            \n            for row in rows:\n                cells = row.query_selector_all(\"td\")\n                if len(cells) == 2:\n                    key = cells[0].text_content().strip()\n                    value = cells[1].text_content().strip()\n                    company_data[key] = value\n            \n            browser.close()\n            return company_data\n        else:\n            print(f\"USDOT Numaras\u0131 {usdot_number} i\u00e7in sonu\u00e7 bulunamad\u0131.\")\n            browser.close()\n            return None\n\n# \u00d6rnek kullan\u0131m\nif __name__ == \"__main__\":\n    # Ger\u00e7ek bir USDOT numaras\u0131 ile test edin\n    test_usdot = \"1234567\" \n    info = scrape_company_info(test_usdot)\n\n    if info:\n        print(f\"\u015eirket Bilgileri ({test_usdot}):\")\n        for key, value in info.items():\n            print(f\"- {key}: {value}\")\n        \n        # Bilgileri Pandas DataFrame'e d\u00f6n\u00fc\u015ft\u00fcrmek isterseniz:\n        df = pd.DataFrame([info])\n        print(\"\\nPandas DataFrame:\")\n        print(df)\n    else:\n        print(f\"USDOT Numaras\u0131 {test_usdot} i\u00e7in bilgi \u00e7ekilemedi.\")\n    <\/code><\/pre>\n<p>Bu kod, Playwright ile bir taray\u0131c\u0131 ba\u015flat\u0131r, FMCSA arama sayfas\u0131na gider, USDOT numaras\u0131 alan\u0131n\u0131 bulur, de\u011feri girer, arama butonuna t\u0131klar ve sonu\u00e7 sayfas\u0131ndaki tabloyu kaz\u0131r. <code>headless=True<\/code> parametresi, taray\u0131c\u0131n\u0131n arka planda g\u00f6r\u00fcnmez bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Bu, otomasyon g\u00f6revleri i\u00e7in idealdir. Ancak, hata ay\u0131klama s\u0131ras\u0131nda <code>headless=False<\/code> yaparak taray\u0131c\u0131n\u0131n g\u00f6rsel olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz. <code>page.wait_for_selector()<\/code> fonksiyonu, sayfan\u0131n belirli bir \u00f6\u011feyi y\u00fcklemesini beklemek i\u00e7in kullan\u0131l\u0131r, bu da kaz\u0131ma i\u015fleminin kararl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. <code>query_selector<\/code> ve <code>query_selector_all<\/code> metodlar\u0131, CSS selector&#8217;lar\u0131 kullanarak sayfa \u00f6\u011felerini se\u00e7mek i\u00e7in kullan\u0131l\u0131r. Bu selector&#8217;lar\u0131n do\u011fru bir \u015fekilde belirlenmesi, projenin ba\u015far\u0131s\u0131 i\u00e7in hayati \u00f6nem ta\u015f\u0131r. FMCSA web sitesinin HTML yap\u0131s\u0131 de\u011fi\u015fti\u011finde bu selector&#8217;lar\u0131n g\u00fcncellenmesi gerekebilir. Elde edilen veriler bir Python s\u00f6zl\u00fc\u011f\u00fc olarak saklan\u0131r ve iste\u011fe ba\u011fl\u0131 olarak bir Pandas DataFrame&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fclerek daha ileri analizler i\u00e7in haz\u0131r hale getirilir. Bu temel yap\u0131, daha karma\u015f\u0131k veri kaz\u0131ma senaryolar\u0131 i\u00e7in bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r.<\/p>\n<h2>Birden Fazla \u015eirket Bilgisini Toplama ve Veri Yap\u0131land\u0131rma<\/h2>\n<p>Tek bir \u015firketin bilgisini \u00e7ekmek iyi bir ba\u015flang\u0131\u00e7 olsa da, ger\u00e7ek d\u00fcnya senaryolar\u0131nda genellikle y\u00fczlerce hatta binlerce \u015firketin verisine ihtiya\u00e7 duyar\u0131z. Bu durumda, kaz\u0131y\u0131c\u0131m\u0131z\u0131 birden fazla \u015firket bilgisini toplamak ve bu verileri anlaml\u0131 bir yap\u0131da saklamak \u00fczere geli\u015ftirmemiz gerekir. Bunun i\u00e7in, i\u015flenecek USDOT numaralar\u0131n\u0131n bir listesini olu\u015fturabilir ve bu liste \u00fczerinde d\u00f6ng\u00fc kurarak her bir \u015firket i\u00e7in <code>scrape_company_info<\/code> fonksiyonunu \u00e7a\u011f\u0131rabiliriz. Elde edilen verileri bir liste i\u00e7inde saklay\u0131p, sonunda bu listeyi tek bir Pandas DataFrame&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmek, verileri yap\u0131land\u0131rman\u0131n en etkili yollar\u0131ndan biridir.<\/p>\n<pre><code>\nfrom playwright.sync_api import sync_playwright\nimport pandas as pd\nimport time # Bekleme s\u00fcreleri i\u00e7in\n\ndef scrape_company_info(page, usdot_number):\n    \"\"\"Belirli bir sayfa nesnesi ve USDOT numaras\u0131 ile \u015firket bilgisi \u00e7eker.\"\"\"\n    try:\n        # FMCSA arama sayfas\u0131n\u0131n URL'si\n        search_url = \"https:\/\/safer.fmcsa.dot.gov\/CompanySearch\/AdvCtrl_Query.asp\" \n        page.goto(search_url, wait_until=\"networkidle\") # Sayfan\u0131n tamamen y\u00fcklenmesini bekle\n\n        # USDOT numaras\u0131 alan\u0131n\u0131 bulup de\u011feri giriyoruz\n        page.fill(\"input[name='query_USDOF_NUMBER']\", usdot_number) \n\n        # Arama butonunu bulup t\u0131kl\u0131yoruz\n        page.click(\"input[value='Search']\")\n\n        # Arama sonu\u00e7lar\u0131n\u0131n y\u00fcklenmesini bekliyoruz\n        page.wait_for_selector(\"table.table-bordered\", timeout=30000) # 30 saniye bekle\n\n        # \u015eirket bilgilerini i\u00e7eren tabloyu buluyoruz\n        company_table = page.query_selector(\"table.table-bordered\")\n\n        if company_table:\n            rows = company_table.query_selector_all(\"tr\")\n            company_data = {\"USDOT\": usdot_number} # USDOT numaras\u0131n\u0131 da ekleyelim\n            \n            for row in rows:\n                cells = row.query_selector_all(\"td\")\n                if len(cells) == 2:\n                    key = cells[0].text_content().strip()\n                    value = cells[1].text_content().strip()\n                    # Anahtar isimlerini daha anla\u015f\u0131l\u0131r hale getirebiliriz\n                    if \"USDOT Number\" in key: key = \"USDOT\"\n                    elif \"Legal Name\" in key: key = \"LegalName\"\n                    elif \"Doing Business As (DBA)\" in key: key = \"DBA\"\n                    elif \"Street\" in key: key = \"Street\"\n                    elif \"City\" in key: key = \"City\"\n                    elif \"State\" in key: key = \"State\"\n                    elif \"ZIP Code\" in key: key = \"ZIPCode\"\n                    elif \"Country\" in key: key = \"Country\"\n                    elif \"Name of Controlling Company\" in key: key = \"ControllingCompany\"\n                    elif \"Physical Address\" in key: key = \"PhysicalAddress\" # Bu alan bazen farkl\u0131l\u0131k g\u00f6sterebilir\n                    elif \"Mailing Address\" in key: key = \"MailingAddress\" # Bu alan bazen farkl\u0131l\u0131k g\u00f6sterebilir\n                    # Di\u011fer alanlar\u0131 da benzer \u015fekilde d\u00fczenleyebilirsiniz.\n\n                    company_data[key] = value\n            \n            return company_data\n        else:\n            print(f\"USDOT Numaras\u0131 {usdot_number} i\u00e7in sonu\u00e7 tablosu bulunamad\u0131.\")\n            return None\n            \n    except Exception as e:\n        print(f\"USDOT Numaras\u0131 {usdot_number} i\u015flenirken hata olu\u015ftu: {e}\")\n        return None\n\ndef scrape_multiple_companies(usdot_list):\n    all_company_data = []\n    with sync_playwright() as p:\n        browser = p.chromium.launch(headless=True)\n        page = browser.new_page()\n\n        for usdot in usdot_list:\n            print(f\"\u0130\u015fleniyor: {usdot}\")\n            company_info = scrape_company_info(page, usdot)\n            if company_info:\n                all_company_data.append(company_info)\n            \n            # FMCSA'n\u0131n botlara kar\u015f\u0131 korumalar\u0131n\u0131 tetiklememek i\u00e7in rastgele bekleme s\u00fcreleri ekleyelim\n            time.sleep(random.uniform(2, 5)) \n\n        browser.close()\n    \n    return pd.DataFrame(all_company_data)\n\n# \u00d6rnek kullan\u0131m\nif __name__ == \"__main__\":\n    import random # Rastgele bekleme s\u00fcreleri i\u00e7in\n\n    # \u0130\u015flenecek USDOT numaralar\u0131n\u0131n listesi (ger\u00e7ek numaralarla de\u011fi\u015ftirin)\n    usdot_numbers_to_scrape = [\n        \"1000001\", \"1000002\", \"1000003\", \"1000004\", \"1000005\", \n        \"1000006\", \"1000007\", \"1000008\", \"1000009\", \"1000010\"\n    ]\n\n    print(\"Birden fazla \u015firket bilgisi \u00e7ekiliyor...\")\n    df_companies = scrape_multiple_companies(usdot_numbers_to_scrape)\n\n    if not df_companies.empty:\n        print(\"\\n--- Toplanan \u015eirket Bilgileri (\u0130lk 5 Sat\u0131r) ---\")\n        print(df_companies.head())\n        \n        # Verileri CSV dosyas\u0131na kaydetmek i\u00e7in\n        df_companies.to_csv(\"fmcsa_company_data.csv\", index=False)\n        print(\"\\nVeriler 'fmcsa_company_data.csv' dosyas\u0131na kaydedildi.\")\n    else:\n        print(\"Hi\u00e7bir \u015firket bilgisi \u00e7ekilemedi.\")\n    <\/code><\/pre>\n<p>Bu kodda, <code>scrape_multiple_companies<\/code> fonksiyonu, bir USDOT numaralar\u0131 listesi al\u0131r ve her biri i\u00e7in <code>scrape_company_info<\/code> fonksiyonunu \u00e7a\u011f\u0131r\u0131r. <code>scrape_company_info<\/code> fonksiyonu art\u0131k tek ba\u015f\u0131na bir taray\u0131c\u0131 ba\u015flatmak yerine, bir sayfa nesnesi al\u0131r. Bu, ayn\u0131 taray\u0131c\u0131 oturumunda birden fazla sayfay\u0131 y\u00f6neterek daha verimli olmam\u0131z\u0131 sa\u011flar. Ayr\u0131ca, FMCSA&#8217;n\u0131n bot alg\u0131lamas\u0131n\u0131 tetikleyebilecek h\u0131zl\u0131 istekleri \u00f6nlemek i\u00e7in <code>time.sleep(random.uniform(2, 5))<\/code> ile rastgele bekleme s\u00fcreleri ekledik. <code>wait_until=&quot;networkidle&quot;<\/code> parametresi, sayfan\u0131n t\u00fcm a\u011f isteklerinin tamamlanmas\u0131n\u0131 bekler, bu da dinamik i\u00e7eri\u011fin y\u00fcklenmesi i\u00e7in daha g\u00fcvenilir bir y\u00f6ntemdir. Elde edilen t\u00fcm \u015firket verileri bir liste i\u00e7inde toplan\u0131r ve sonunda tek bir Pandas DataFrame&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr. Bu DataFrame, daha sonra CSV, Excel gibi formatlarda kolayca kaydedilebilir veya do\u011frudan veri analizi i\u00e7in kullan\u0131labilir. Anahtar isimlerinin daha anla\u015f\u0131l\u0131r hale getirilmesi, verinin okunabilirli\u011fini ve kullan\u0131m\u0131n\u0131 art\u0131r\u0131r. Bu yap\u0131, b\u00fcy\u00fck veri setlerini y\u00f6netmek ve analiz etmek i\u00e7in sa\u011flam bir temel olu\u015fturur.<\/p>\n<h2>Geli\u015fmi\u015f Teknikler: Sayfalama, Hata Y\u00f6netimi ve Proxy Kullan\u0131m\u0131<\/h2>\n<p>FMCSA web sitesi gibi b\u00fcy\u00fck veri setleri sunan platformlarda, veriler genellikle birden fazla sayfaya yay\u0131lm\u0131\u015f olabilir (sayfalama). Ayr\u0131ca, a\u011f sorunlar\u0131, web sitesi de\u011fi\u015fiklikleri veya ge\u00e7ici engellemeler gibi beklenmedik durumlarla kar\u015f\u0131la\u015fabiliriz. Bu t\u00fcr senaryolarla ba\u015fa \u00e7\u0131kmak i\u00e7in kaz\u0131y\u0131c\u0131m\u0131za daha geli\u015fmi\u015f yetenekler eklememiz gerekir. Bu b\u00f6l\u00fcmde, sayfalama ile ba\u015fa \u00e7\u0131kmay\u0131, hata y\u00f6netimini iyile\u015ftirmeyi ve anonimli\u011fi art\u0131rmak i\u00e7in proxy kullanmay\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Sayfalama (Pagination) ile Ba\u015fa \u00c7\u0131kma<\/h3>\n<p>Bir arama sonucunda y\u00fczlerce kay\u0131t varsa, bu kay\u0131tlar genellikle sayfalara b\u00f6l\u00fcn\u00fcr. Kaz\u0131y\u0131c\u0131m\u0131z\u0131n t\u00fcm bu sayfalardaki verileri \u00e7ekebilmesi i\u00e7in sayfalama mekanizmas\u0131n\u0131 anlamas\u0131 ve bu sayfalar aras\u0131nda gezinmesi gerekir. FMCSA sitesinde bu genellikle &#8220;Next&#8221; d\u00fc\u011fmesi, sayfa numaralar\u0131 veya belirli URL parametreleri arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r. Bir &#8220;Next&#8221; d\u00fc\u011fmesini t\u0131klayarak sayfalama yapmak i\u00e7in \u015fu ad\u0131mlar\u0131 izleyebiliriz:<\/p>\n<ol>\n<li>Mevcut sayfadaki verileri topla.<\/li>\n<li>&#8220;Next&#8221; d\u00fc\u011fmesini bul.<\/li>\n<li>E\u011fer &#8220;Next&#8221; d\u00fc\u011fmesi varsa, t\u0131kla ve yeni sayfan\u0131n y\u00fcklenmesini bekle.<\/li>\n<li>Bu i\u015flemi &#8220;Next&#8221; d\u00fc\u011fmesi kalmayana kadar tekrarla.<\/li>\n<\/ol>\n<p>Bu mant\u0131\u011f\u0131 <code>scrape_company_info<\/code> fonksiyonumuzun i\u00e7ine veya ayr\u0131 bir fonksiyon olarak entegre edebiliriz. \u00d6rne\u011fin, arama sonu\u00e7lar\u0131 sayfas\u0131nda <code>table.table-bordered<\/code> gibi bir tabloyu kaz\u0131d\u0131ktan sonra, sayfa numaralar\u0131n\u0131 veya &#8220;Next&#8221; d\u00fc\u011fmesini arayabiliriz.<\/p>\n<h3>Sa\u011flam Hata Y\u00f6netimi<\/h3>\n<p>Web kaz\u0131ma projelerinde hatalar ka\u00e7\u0131n\u0131lmazd\u0131r. A\u011f ba\u011flant\u0131s\u0131 kesintileri, web sitesi yap\u0131s\u0131ndaki de\u011fi\u015fiklikler, CAPTCHA&#8217;lar veya IP engellemeleri gibi durumlar kaz\u0131ma i\u015flemini durdurabilir. Bu nedenle, kodumuza kapsaml\u0131 hata y\u00f6netimi eklemeliyiz. <code>try-except<\/code> bloklar\u0131n\u0131 kullanarak potansiyel hatalar\u0131 yakalayabilir ve bunlar\u0131 kaydedebiliriz. \u00d6rne\u011fin, bir \u00f6\u011fe bulunamad\u0131\u011f\u0131nda veya bir sayfa y\u00fcklenmedi\u011finde program\u0131n \u00e7\u00f6kmesini engellemek \u00f6nemlidir. Hatal\u0131 USDOT numaralar\u0131n\u0131 veya i\u015flenemeyen kay\u0131tlar\u0131 ayr\u0131 bir listede toplayarak daha sonra bu kay\u0131tlara tekrar bakabiliriz.<\/p>\n<h3>Proxy Kullan\u0131m\u0131<\/h3>\n<p>B\u00fcy\u00fck miktarda veri \u00e7ekerken, IP adresinizin FMCSA taraf\u0131ndan engellenme riski vard\u0131r. Bu riski azaltmak ve anonimli\u011fi art\u0131rmak i\u00e7in proxy sunucular\u0131 kullanabiliriz. Playwright, proxy sunucular\u0131 \u00fczerinden taray\u0131c\u0131 ba\u015flatmay\u0131 destekler. Bir proxy sunucusu kullanmak i\u00e7in, taray\u0131c\u0131y\u0131 ba\u015flat\u0131rken <code>proxy<\/code> arg\u00fcman\u0131n\u0131 belirtmeniz gerekir.<\/p>\n<pre><code>\nbrowser = p.chromium.launch(\n    headless=True,\n    proxy={\n        \"server\": \"http:\/\/your_proxy_server:port\", # Proxy sunucu adresiniz ve portunuz\n        \"username\": \"your_username\", # Proxy kullan\u0131c\u0131 ad\u0131n\u0131z (varsa)\n        \"password\": \"your_password\" # Proxy \u015fifreniz (varsa)\n    }\n)\n    <\/code><\/pre>\n<p>Proxy sunucular\u0131n\u0131 y\u00f6netmek, \u00f6zellikle rotasyonlu proxy&#8217;ler (her istekte farkl\u0131 bir IP adresi kullanan) kullanmak, karma\u015f\u0131k bir konu olabilir. \u00dccretli proxy hizmetleri bu konuda daha iyi \u00e7\u00f6z\u00fcmler sunar. Proxy kullanmak, kaz\u0131ma i\u015fleminin s\u00fcreklili\u011fini sa\u011flamak ve IP engellemelerinden ka\u00e7\u0131nmak i\u00e7in etkili bir y\u00f6ntemdir. Ancak, proxy&#8217;lerin de bir maliyeti vard\u0131r ve \u00fccretsiz proxy&#8217;ler genellikle g\u00fcvenilir de\u011fildir. Bu nedenle, projenizin \u00f6l\u00e7e\u011fine ve b\u00fct\u00e7enize uygun bir proxy stratejisi belirlemek \u00f6nemlidir. Bu geli\u015fmi\u015f teknikler, FMCSA verilerini daha b\u00fcy\u00fck \u00f6l\u00e7ekte, daha g\u00fcvenilir ve daha sa\u011flam bir \u015fekilde \u00e7ekmenizi sa\u011flar.<\/p>\n<h2>Vaka Analizi: Sigorta \u015eirketi \u0130\u00e7in Risk De\u011ferlendirmesi<\/h2>\n<p>Bir sigorta \u015firketi, yeni m\u00fc\u015fterilerinden biri olan b\u00fcy\u00fck bir nakliye firmas\u0131 i\u00e7in risk de\u011ferlendirmesi yapmak istiyor. Bu firman\u0131n g\u00fcvenlik kay\u0131tlar\u0131, ge\u00e7mi\u015f kazalar\u0131 ve denetim sonu\u00e7lar\u0131, sigorta primlerinin belirlenmesinde kritik rol oynuyor. Manuel olarak FMCSA web sitesinden bu bilgileri toplamak g\u00fcnler s\u00fcrebilir ve eksik veya g\u00fcncel olmayan bilgilere dayanarak yanl\u0131\u015f kararlar al\u0131nabilir. Bu noktada, Python ve Playwright ile geli\u015ftirilmi\u015f bir FMCSA veri kaz\u0131y\u0131c\u0131 devreye giriyor.<\/p>\n<p><strong>Senaryo:<\/strong><\/p>\n<ol>\n<li>Sigorta \u015firketi, potansiyel m\u00fc\u015fterisi olan nakliye firmas\u0131n\u0131n USDOT numaralar\u0131n\u0131 bir listeye toplar.<\/li>\n<li>Bu USDOT numaralar\u0131 listesi, daha \u00f6nce geli\u015ftirilen <code>scrape_multiple_companies<\/code> fonksiyonuna verilir.<\/li>\n<li>Kaz\u0131y\u0131c\u0131, FMCSA web sitesine ba\u011flanarak her bir USDOT numaras\u0131 i\u00e7in temel bilgileri (\u015firket ad\u0131, adresi, operasyon t\u00fcr\u00fc), g\u00fcvenlik derecelendirmesini, son 2 y\u0131ll\u0131k denetim sonu\u00e7lar\u0131n\u0131 ve kaza istatistiklerini \u00e7eker.<\/li>\n<li>Elde edilen veriler, bir Pandas DataFrame&#8217;e d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr.<\/li>\n<li>DataFrame \u00fczerinde analizler yap\u0131l\u0131r:<\/li>\n<ul>\n<li>Son iki y\u0131lda ka\u00e7 denetim yap\u0131ld\u0131\u011f\u0131 ve bunlar\u0131n ka\u00e7\u0131n\u0131n ihlalle sonu\u00e7land\u0131\u011f\u0131 hesaplan\u0131r.<\/li>\n<li>Yap\u0131lan kaza say\u0131s\u0131 ve bu kazalar\u0131n ciddiyet dereceleri incelenir.<\/li>\n<li>\u015eirketin g\u00fcvenlik derecelendirmesi kontrol edilir.<\/li>\n<li>Belirlenen kriterlere g\u00f6re (\u00f6rne\u011fin, belirli bir say\u0131da ciddi ihlal veya kaza varsa) \u015firketin &#8220;y\u00fcksek riskli&#8221; olarak i\u015faretlenmesi sa\u011flan\u0131r.<\/li>\n<\/ul>\n<li>Analiz sonu\u00e7lar\u0131, sigorta \u015firketi risk analistlerine sunulur. Bu sayede, sigorta \u015firketi, teklif edilen primleri daha do\u011fru belirleyebilir, potansiyel riskleri \u00f6nceden tespit edebilir ve daha bilin\u00e7li kararlar alabilir.<\/li>\n<\/ol>\n<p><strong>Sonu\u00e7:<\/strong> Bu vaka analizi, otomatik veri kaz\u0131man\u0131n sadece veri toplama i\u015flemini h\u0131zland\u0131rmakla kalmay\u0131p, ayn\u0131 zamanda daha derinlemesine analizler yap\u0131lmas\u0131na ve i\u015f kararlar\u0131n\u0131n iyile\u015ftirilmesine nas\u0131l olanak tan\u0131d\u0131\u011f\u0131n\u0131 g\u00f6stermektedir. Playwright&#8217;in dinamik web siteleriyle ba\u015fa \u00e7\u0131kma yetene\u011fi ve Python&#8217;un veri analizi ekosistemi, bu t\u00fcr karma\u015f\u0131k sorunlara pratik ve etkili \u00e7\u00f6z\u00fcmler sunar. Sigorta \u015firketi, bu otomatik sistemi kullanarak hem zaman tasarrufu sa\u011flar hem de risk y\u00f6netimi yeteneklerini \u00f6nemli \u00f6l\u00e7\u00fcde geli\u015ftirir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, Python ve Playwright kullanarak g\u00fcvenilir bir FMCSA veri kaz\u0131y\u0131c\u0131 olu\u015fturman\u0131n temel ad\u0131mlar\u0131n\u0131, ileri tekniklerini ve ger\u00e7ek d\u00fcnya uygulamalar\u0131n\u0131 inceledik. FMCSA gibi devlet kurumlar\u0131n\u0131n sundu\u011fu de\u011ferli verilere eri\u015fim, i\u015f s\u00fcre\u00e7lerini optimize etmek ve daha bilin\u00e7li kararlar almak i\u00e7in b\u00fcy\u00fck \u00f6nem ta\u015f\u0131maktad\u0131r. Playwright&#8217;in modern taray\u0131c\u0131 otomasyon yetenekleri sayesinde, JavaScript ile dinamik olarak y\u00fcklenen karma\u015f\u0131k web sitelerinden bile etkili bir \u015fekilde veri \u00e7ekebiliriz. Python&#8217;un geni\u015f k\u00fct\u00fcphane deste\u011fi ile birle\u015fti\u011finde, bu ara\u00e7lar veri toplama ve analiz projeleri i\u00e7in g\u00fc\u00e7l\u00fc bir kombinasyon olu\u015fturur.<\/p>\n<p>Unutulmamal\u0131d\u0131r ki, web kaz\u0131ma i\u015flemleri, hedef web sitesinin kullan\u0131m ko\u015fullar\u0131na ve yasal d\u00fczenlemelere uygun olarak yap\u0131lmal\u0131d\u0131r. A\u015f\u0131r\u0131 y\u00fcklenmekten ka\u00e7\u0131nmak, sayfa y\u00fckleme s\u00fcrelerini beklemek ve m\u00fcmk\u00fcnse web sitesinin sundu\u011fu API&#8217;lar\u0131 kullanmak her zaman en iyi yakla\u015f\u0131md\u0131r. Bu rehber, teknik bir ba\u015flang\u0131\u00e7 noktas\u0131 sunmaktad\u0131r ve her projenin kendine \u00f6zg\u00fc gereksinimlerine g\u00f6re uyarlanmas\u0131 gerekebilir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ul>\n<li>\n            <strong>Soru:<\/strong> FMCSA web sitesinden veri \u00e7ekerken yasal sorunlarla kar\u015f\u0131la\u015f\u0131r m\u0131y\u0131m?<br \/>\n            <strong>Cevap:<\/strong> Web kaz\u0131ma yaparken her zaman hedef web sitesinin kullan\u0131m ko\u015fullar\u0131n\u0131 (Terms of Service) kontrol etmelisiniz. FMCSA&#8217;n\u0131n verileri genellikle kamuya a\u00e7\u0131k olsa da, a\u015f\u0131r\u0131 istek g\u00f6ndermek veya bot gibi davranmak kullan\u0131m ko\u015fullar\u0131n\u0131 ihlal edebilir. Kaz\u0131y\u0131c\u0131n\u0131z\u0131 yava\u015flatmak, <code>robots.txt<\/code> dosyas\u0131n\u0131 kontrol etmek ve m\u00fcmk\u00fcnse resmi API&#8217;lar\u0131 kullanmak yasal uyumlulu\u011fu art\u0131r\u0131r.\n        <\/li>\n<li>\n            <strong>Soru:<\/strong> Playwright ile \u00e7ekerken web sitesi engellerse ne yapmal\u0131y\u0131m?<br \/>\n            <strong>Cevap:<\/strong> Engellemelerle ba\u015fa \u00e7\u0131kmak i\u00e7in IP rotasyonu (proxy sunucular\u0131 kullanmak), daha yava\u015f ve insan benzeri davran\u0131\u015flar sergilemek (rastgele beklemeler, fare hareketleri sim\u00fclasyonu gibi) ve taray\u0131c\u0131 parmak izini (browser fingerprinting) kar\u0131\u015ft\u0131rmak gibi teknikler kullan\u0131labilir. CAPTCHA \u00e7\u00f6z\u00fcmleri entegre etmek de bir se\u00e7enek olabilir ancak bu genellikle daha karma\u015f\u0131kt\u0131r.\n        <\/li>\n<li>\n            <strong>Soru:<\/strong> Toplad\u0131\u011f\u0131m verileri nas\u0131l daha iyi analiz edebilirim?<br \/>\n            <strong>Cevap:<\/strong> Pandas k\u00fct\u00fcphanesi, verileri temizlemek, d\u00f6n\u00fc\u015ft\u00fcrmek ve analiz etmek i\u00e7in \u00e7ok g\u00fc\u00e7l\u00fcd\u00fcr. Verilerinizi bir CSV dosyas\u0131na kaydedip Excel, Google Sheets gibi ara\u00e7larla da analiz edebilirsiniz. Daha ileri analizler i\u00e7in NumPy, SciPy veya makine \u00f6\u011frenmesi k\u00fct\u00fcphaneleri (Scikit-learn, TensorFlow) kullan\u0131labilir.\n        <\/li>\n<li>\n            <strong>Soru:<\/strong> FMCSA web sitesinin yap\u0131s\u0131 de\u011fi\u015firse kaz\u0131y\u0131c\u0131m ne olur?<br \/>\n            <strong>Cevap:<\/strong> Web sitelerinin yap\u0131s\u0131 zamanla de\u011fi\u015febilir. Bu durumda, kaz\u0131y\u0131c\u0131n\u0131z\u0131n kulland\u0131\u011f\u0131 CSS selector&#8217;lar\u0131 veya XPath ifadeleri ge\u00e7ersiz hale gelebilir. Bu t\u00fcr de\u011fi\u015fiklikler oldu\u011funda, kaz\u0131y\u0131c\u0131n\u0131z\u0131 g\u00fcncellemeniz gerekecektir. Bu nedenle, kodunuzu mod\u00fcler tutmak ve selector&#8217;lar\u0131 kolayca g\u00fcncelleyebilece\u011finiz bir yap\u0131da tasarlamak \u00f6nemlidir.\n        <\/li>\n<li>\n            <strong>Soru:<\/strong> Headless modda \u00e7al\u0131\u015f\u0131rken hata ay\u0131klama yapmak zor mu?<br \/>\n            <strong>Cevap:<\/strong> Headless modda hata ay\u0131klama biraz daha zorlay\u0131c\u0131 olabilir. Hata ay\u0131klama s\u0131ras\u0131nda <code>headless=False<\/code> yaparak taray\u0131c\u0131n\u0131n g\u00f6rsel olarak \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flayabilirsiniz. Ayr\u0131ca, Playwright&#8217;in sa\u011flad\u0131\u011f\u0131 loglama ve ekran g\u00f6r\u00fcnt\u00fcs\u00fc alma \u00f6zelliklerini kullanarak sorunlar\u0131 tespit edebilirsiniz.\n        <\/li>\n<\/ul>\n<p>#Python #WebScraping #Playwright #FMCSA #DataEngineering #Automation<\/p>\n<div class=\"github-example-link\"><strong>\u00d6rnek kod:<\/strong> <a href=\"https:\/\/github.com\/fatihsoysalcom\/playwright-fmcsa-data-scraper-example\" target=\"_blank\" rel=\"noopener noreferrer\">github.com\/fatihsoysalcom\/playwright-fmcsa-data-scraper-example<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"Amerika Birle\u015fik Devletleri&#8217;nde faaliyet g\u00f6steren nakliye \u015firketlerinin g\u00fcvenilirli\u011fi ve performans\u0131n\u0131 anlamak, sekt\u00f6rdeki bir\u00e7ok payda\u015f i\u00e7in kritik \u00f6neme sahiptir.","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":[1403],"tags":[],"class_list":{"0":"post-45619","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-python","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>Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma - 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\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"Amerika Birle\u015fik Devletleri&#039;nde faaliyet g\u00f6steren nakliye \u015firketlerinin g\u00fcvenilirli\u011fi ve performans\u0131n\u0131 anlamak, sekt\u00f6rdeki bir\u00e7ok payda\u015f i\u00e7in kritik \u00f6neme sahiptir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-10T06:01:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-10T06:03:16+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=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma\",\"datePublished\":\"2026-11-10T06:01:14+00:00\",\"dateModified\":\"2026-11-10T06:03:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/\"},\"wordCount\":3607,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Python\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/\",\"name\":\"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-11-10T06:01:14+00:00\",\"dateModified\":\"2026-11-10T06:03:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma\"}]},{\"@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":"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma - 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\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma","og_description":"Amerika Birle\u015fik Devletleri'nde faaliyet g\u00f6steren nakliye \u015firketlerinin g\u00fcvenilirli\u011fi ve performans\u0131n\u0131 anlamak, sekt\u00f6rdeki bir\u00e7ok payda\u015f i\u00e7in kritik \u00f6neme sahiptir.","og_url":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-11-10T06:01:14+00:00","article_modified_time":"2026-11-10T06:03:16+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma","datePublished":"2026-11-10T06:01:14+00:00","dateModified":"2026-11-10T06:03:16+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/"},"wordCount":3607,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Python"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/","name":"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-11-10T06:01:14+00:00","dateModified":"2026-11-10T06:03:16+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/python-ve-playwright-ile-guvenilir-fmcsa-veri-kaziyici-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Python ve Playwright ile G\u00fcvenilir FMCSA Veri Kaz\u0131y\u0131c\u0131 Olu\u015fturma"}]},{"@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\/45619","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=45619"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45619\/revisions"}],"predecessor-version":[{"id":45620,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/45619\/revisions\/45620"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=45619"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=45619"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=45619"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}