Geçen yıl sistem programlama dersi a
lırken, kendim için de başvurabileceğim kaynak olması adına güzel bir ders serisi (belki de ileride kitaba dönüştürebileceğim) bir döküman hazırlamıştım. Yandex hesabıma bakarken bu notlara denk geldim ve GNU/linux üzerinde güzel bir kaynak olarak kullanılabileceğini düşündüm. Aşağıdaki linkten notlara ulaşabilirsiniz, faydalı olması dileğiyle;
Sunucumuzun veritabanını elbette uzaktan kontrol etmek isteriz, bunu sağlamak için de Datagrip gibi programlar vasıtasıyla uzaktaki sunucumuzun veritabanına bağlanmamız gerekir. Sunucularda bu özellik varsayılan olarak kapalıdır ve açılması gerekir. Gelelim nasıl açacağımıza;
Önce mysql ayarlarından bunu sağlamak için dış IP’leri açalım, /etc/mysql/my.cnf dosyasına girip,
kısmını yorum satırı haline getirin (başına # koyun), böylece dış ip’lerde dinleniyor olacak.
Şimdi de mysql’e “dışarıdan girişlere izin ver” demek için şunları yapalım;
$ mysql -u root -p #Mysql baglantisini root olarak actik
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by 'root_sifrenizi_yazin';FLUSH PRIVILEGES;
Mysql servisini yeniden başlatalım;
sudo service mysql restart
Böylece uzaktan root olarak sunucunuzun database’ine erişebilir oldunuz 🙂
Son birkaç gündür Scrapy adında mottosu “hızlı, basit geliştirmeye elverişli” olan bir data kazıma framework’ü ile tanıştım. Gugıl ve Ecosia amcada aratmama rağmen hiç Türkçe döküman bulamayınca içime öküz oturuverdi. Ben de birkaç günlük dahi olsa Türkçe olarak bu framework hakkında birşeyler yazmak istedim.
Öncelikle Scrapy bir python framework’u, yaptığı şey sizin gireceğiniz kurallara göre siteyi parçalara ayırıp, sitenin içerisindeki bilgileri size sunmakta. Sitenin içerisinden aldığınız bilgiler ile ne yapacağınız ise size kalmış bir durum. Günümüzde big data kavramınının iyice yaygınlaşması ile beraber Scrapy kesinlikle bu iş için biçilmiş kaftan.
Peki Scrapy ile örnek bir site parse etmek istesek?
Öncelikle Scrapy’ı bilgisayarınıza kurmalısınız, windows’ta nasıl yapılıyor bilmiyorum, eğer windows üzerinde python geliştiriyorsanız STFW 🙂
Apt-get paketli yöneticilerde (debian, ubuntu, mint gibi) ise yapmanız gereken gayet basit, “pip” yani “Python İnstalling Packages” aracı ile şu komutu vermeniz yeterli :
pip install Scrapy
Eğer pip yoksa sorun değil, pipsiz kurulum;
sudo apt-get install python-scrapy
Eğer Arch linux’a kuracaksanız;
yaourt -S scrapy
Daha detaylı kurulum bilgisi için;
http://doc.scrapy.org/en/1.1/intro/install.html
Bu kadar kurulum hikayesinden sonra, gelelim basit bir örümcek oluşturup site crawl etmeye. Aslında kendi sitemi crawl ederek örneklendirmeyi düşündüm başta ancak, yerimde duramayan biri olarak yarın sitenin şemasını değiştirdiğimde anlatıma yazık olacağından direk sitesindeki tutorial’i Türkçeleştirip kendi eklemelerimle anlatacağım;
Scrapy 1.1.2 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
bench Run quick benchmark test
commands
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
[ more ] More commands available when run from project directory
Use "scrapy <command> -h" to see more info about a command
İlk satırda eğer aktif bir scrapy projesi içerisinde iseniz size projeyi yazacaktır, çünkü scrapy’daki kimi komutlar proje bağımlıdırlar, yani proje içerisinde değilseniz çalıştırmanız mümkün olmayacaktır. (mesela crawl gibi, değineceğiz…)
İlk önce projemizin temel yapısını oluşturarak başlayalım, konsoldan scrapy projesini açacağınız dizine girdikten sonra;
$ scrapy startproject tutorial
Komutu verdikten sonra şöyle bir çıktı alacaksınız;
New Scrapy project 'tutorial', using template directory '/usr/local/lib/python2.7/dist-packages/scrapy/templates/project', created in:
/home/sezer/Ornek/tutorial
You can start your first spider with:
cd tutorial
scrapy genspider example example.com
Mealen diyor ki, istediğin Scrapy iskeletini falanca dizini örnek alarak /home/sezer/Ornek/tutorial dizini altında oluşturdum, dizine girerek ilk denemeni yapabilirsin, bunun için de gerekli satırlar filanca…
İskeletin içeriğini incelersek;
tutorial/
scrapy.cfg # Scrapy'nin konfigürasyon dosyaları
tutorial/ # Scrapy ana dizini, proejenız burada
__init__.py
items.py # Projede tutacağınız veri iskeleti burada
pipelines.py # Pipeline ile çekeceğiniz kurallar burada
settings.py # Projenin konfigürasyon dosyaları burada
spiders/ # Yazdığınız/yazacağınız spiderlar burada
__init__.py
...
Scrapy yapı olarak OOP bir teknolojiye sahip, Türkçe tabirle “nesne tabanlı bir framework” (olduğu kadar türkçe 🙂 )
Yani bol bol kalıtım ve bol bol metod var işin içinde. Öncelikle kazıyacağımız verileri içerisinde tutmak için bir class oluşturacağız, Scrapy veriyi kazıdıkça bunun içerisinde sözlük olarak tutacak. Ne demiştik ? items.py altında veri iskeletini tutacağız…
Giriyoruz items.py’a ve şöyle bir class oluşturuyoruz;
Farkettiyseniz “Item” class’ından bir class kalıtım alarak türetmiş olduk. temel class’ımıza 3 değişken daha ekledik ve kendimize özgü class’ımızı oluşturmuş olduk.
Şimdi gelelim örümceğimizi yazmaya, şimdi de ”
1
<span class="pre">tutorial/spiders</span>
” dizinine gidiyoruz ve dmoz_spider.py adında bir python dosyası oluşturuyoruz, içerisine de örümceğimizin özelliklerini yazıyoruz;
Kodda her ne kadar aşikar olsa da açıklamak adına bir daha kodu inceleyelim, class’ı Scrapy’ın spider class’ından kalıtım aldık. Bu class’ın özelliği, parse adında bir metodu zorunlu olarak tanımlamamız gerektiği, çünkü site kazındıktan sonra alınan veri buraya koyulmakta. Önce yukarıda oluşturduğumuz DmozItem adındaki class’I py dosyamıza dahil ettik, ardından hangi siteyi kazıyacağımıza Scrapy’a söyledik, sonra da “xpath” ile içerisinden çekeceğimiz kısımları seçtik. Xpath’in ne olduğuna zamanım olduğunda bir başka makalede değineceğim, bir cümle ile açıklamak gerekirse “Bir html sayfanın istenilen kısmını almayı sağlayan yapı” olarak tanımlarsam çok da yanlış konuşmuş olmam. Son kısımda da yield diye bir anahtar kelime ile bu nesneyi pipeline’a gönderdik.
Şimdi kodumuzu çalıştırmaya geldi sıra, bir çıktı olarak kodu elde etmek için şimdilik en basit yöntemi kullanacağız;
scrapy crawl dmoz -o veri.json
Kodu çalıştırıyoruz ve ta taaa, sitenin içeriği bir json dosyası içerisine aktarılmış durumda !
Elbette bu scrapy için ancak basit bir giriş anlatımı, ilerleyen zamanlarda vakit buldukça genişletmeye çalışacağım, ancak kısaca Scrapy böyle bir framework. Tutorial’in orjinali için;
Bir süre önce Ecosia diye bir başlık görmüştüm sözlüklerin birinde. Bir grup yeşili seven bilgisayarcı ekibi şöyle bir fikir ortaya koyuyor, “google reklamlarından ve arama istatistiklerinden para kazanılabiliyor, madem öyle bir tarayıcı yapalım, google’ın reklam ve istatistik gelirlerini bu tarayıcı üzerinden sağlayalım, gelirin %80’iyle ağaç dikelim, %20’sini de aramızda kırışalım.” ardından bu fikir uygulamaya geçiyor ve ortaya Ecosia çıkıyor.
Arama motoru üzerinde kaç ağacın dikilmesine katkıda bulunduğunuzu gösteren bir sayaç da mevcut. Yaptığınız arama başına uygulama diğer kullanıcılarla ortaklaşa kaç ağaç diktiğinizi söylüyor. Üstelik arama için direk google’ın sonuçlarını da önünüze getirebiliyor, ayarlardan bunu da sağlayabiliyorsunuz. Yani arayüz ecoisa.org’dan, içerik google’dan olmuş oluyor. Bence doğa için bu kadarını yapmaya değer. Buyrun linki;
http://www.ecosia.org
Kendileri hakkında daha detaylı malumat için;
https://info.ecosia.org/about
Ayrıca sözlüklerde daha detaylı açıklamaları olduğu için fazla da yazma gereksinimi duymadım. Direk buyrun linki;
https://eksisozluk.com/ecosia–2403802
Oturduğumuz yerden doğaya katkıda bulunabiliyorsak neden yapmayalım ki?
linux kampında sadece hafta sonu olmam nedeniyle, sıkıntı olabilecek yerlere dair bir alet çantası hazırlayayım istedim. Sıkıntı olan yerlerde amacım sorunların olası çözümlerini burada barındırmak.
Sanal makineye ubuntu kuracağım, nasıl kurabilirim?
Sizlere ubuntu mate kurulumu yaptık, dolayısıyla burada yaptığım anlatımın ilk kısmında ISO indirme kısmında, siz buradaki(tıkla) ISO kalıbını kullanın. Seçenekler arasından 64-32 bit seçimini yaptıktan sonra “Via Direct Download” altındaki linkten indirme yapınız, torrent ile indirmeyiniz, torrent portları kapalıdır. Onun dışındaki anlatım aşağıdaki linktedir;
sezer@optimist:~$ sudo /opt/lampp/lampp start
Starting XAMPP for Linux 5.6.23-0...
XAMPP: Starting Apache...ok.
XAMPP: Starting MySQL...ok.
XAMPP: Starting ProFTPD...ok.
Bilgisayarımda PHP/HTML sayfamı nasıl çalıştıracağım?
Xampp’in olduğu dizin altında htdocs(geldiğimde daha detaylı anlatacağım) klasörü, sunucunun dışarıya açılan kapısıdır. Bu dosyaya masaüstüne kısayol oluşturacak şekilde anlatımını yapacağım;
Bu 2 komutu sırayla çalıştırdıktan sonra, bu dizin altındaki tüm dosyaları siliniz. Uğur hocanızın sizden yapmanızı istediği ödevleri bu klasör altında yaparsanız, web tarayıcınızdan ;
http://localhost/
şeklinde girerseniz o dizin altında bulunan sayfalarınızı görüntüleyebilirsiniz.
Sanalda linux kullanıyorum, ekran kuş kadar gözüküyor, nasıl büyütebilirim?
virtualbox panelinde, aygıtlar > misafir eklenti CD kalıbını yerleştir’e tıklayın, ubuntu’da kendiliğinden çalışma isteğini kabul edin. Sanal makinenizi yeniden başlattığınızda sorun çözülecektir. Eğer çözülmez ise arama kısmından display/ekran yazarak görüntü çözünürlüğünüzü yükseltebilirsiniz. Eğer bu CD’yi yerleştirmezseniz, bilgisayarınızın özgün çözünürlüğüne ulaşamayabilirsiniz.
Uğur hoca Github Sablaym text diye birşey kullanıyor ve efsane gözüküyor, bunu nasıl kurabilirim?
Komutlarını sırayla uygularsanız Sublime text kurulur, Menu kısmından ulaşabilirsiniz.
Bilgisayarım Aşırı ısınmakta, neden böyle oluyor olabilir?
Not: Sanal’a kurulum yapanlar için böyle bir olasılık söz konusu değildir.
Laptoplarınıza ancak ubuntu-mate kuracak kadar vaktim oldu. Bilgisayarlarınızda 2 ekran kartı varsa, bunların konfigürasyonunun doğru şekilde yapılması gerekiyor, aksi halde ekran kartınız devamlı çalıştığından, makine sıcaklığınız artıyor. Konu hakkında detaylı bilgiyi geldiğimde anlatırım (hatırlatınız 🙂 ) . Yapmanız gereken;
tek ekran kartınız var demektir ve kurulum yapmanıza gerek yoktur.
Kurulum yapacak arkadaşlar, önce sistemlerini güncellesinler (bknz: gnu/linux’umu nasıl güncellerim?) ardından menüden, System > Preferences > Hardware > Additional Device kısmına tıklayınız. Orada Nvidia ekran kartınızın ismini ve altında driver’ını göreceksiniz, parantez içerisinde “tested” yazanı tıklayınız(muhtemelen en üstteki), “Apply Changes” diyip bekleyiniz, yalnız butona birden fazla kere basmayın, internetinizin ve şarjınızın olduğundan emin olun, eğer bu yükleme yarıda kesilirse uğraşmanız gerekir. Yükleme barı dolduktan sonra, işletim sistemini yeniden başlatınız, sağ üstte NVIDIA ya da intel simgesini göreceksiniz, intel simgesi olduğu sürece intel ekran kartınız, NVIDIA olduğu sürece nvidia ekran kartınız devrede olacaktır. NVIDIA aktif kaldığı sürece bilgisayarınızın sıcaklığı yüksek olacaktır. Buraya tıklayıp, ekran kartınızı değiştirdiğiniz de oturumdan çıkıp tekrar giriş yapmanız ya da bilgisayarınızı yeniden başlatmanız gerekmektedir.
Ekstra sorularınız oldukça admin@sezerbozkir.com adresine mail atarsanız, soruları bu başlık altına ekleyerek yanıtlayacağım.