Ekşisözlük, itüsözlük, uludağsözlük gibi popüler sözlüklerden belirtilen başlıklardaki tüm girdileri alıp, veritabanına yazan crawler. Akademik amaçlar ile kullanılmak üzere geliştirildi ve dolayısıyla bütün sözlüğü taramak veya yeni bir google olma gibi bir amacı yoktur.
Temel olarak bu proje, bazı popüler başlıklarda yazılan girdilerde herhangi bir örüntü (pattern) olup
olmadığı sorusunu cevaplamak üzere çıktı. Örneğin Recep Tayyip Erdoğan
veya Türkiye'den siktir olup gitmek
başlığına hangi ay/yıl daha fazla girdi yazıldı, insanlar en çok hangi
kelimeleri kullandı, en çok girdi yazılan günlerin başka olaylar ile bağlantısı var mı gibi
sorular aklıma gelen birkaç örnek. Veri ortaya çıktıktan sonra üzerine başka analizler
yapmak da mümkün. Eğer ilginizi çekerse analiz fikirlerinizi e-posta atmaktan veya pull-request
yapmaktan çekinmeyin.
Şunu da not etmem gerekir ki lütfen bokunu çıkarmadan kullanın. Bütün sözlüğü download edeceğim, istekler arasında hiç beklemeyeceğim ve bilerek/bilmeyerek DoS yapacağım diyenler varsa: sen kullanma ulan ayı!
Anahtar kelimeler: sözlük, crawl, scrape, ekşi, ekşisözlük, itüsözlük
İtüsözlük tamamiyle yeni bir tasarıma geçti ve HTML'i doğal olarak değişti. Uludağ sözlük de crawler'in yazım tarihinden bu yana değişmiş görünüyor ve şu anki tarih itibariyle (17 Nisan 2015) çalışmıyor. Bu veya diğer sözlükler için katkıda bulunmanız beni sevindirecektir.
Veriler (girdiler) HTML taglerinden ayrılmış ve saf yazı halinde veritabanına eklenmekte. Bu alanlar şunlar:
- Girdinin yazıldığı başlık
- Yazı
- Girdi yazarı (nick)
- Tarih
- Saat
- Girdi numarası
- Başlık numarası
Sisteminizde öncesinde virtualenv paketinin olduğundan emin olun. Eğer yoksa başlamadan önce
pip install virtualenv
ile kurun. Aşağıdaki açıklayıcı komutlar ile projeyi kurun. Kullanım
için bir sonraki bölüme bakın.
Not: Buradaki kurulum sadece Ubuntu 14.04 ile test edilmiştir. Ubuntunun diğer sürümleri ile çalışma olasılığı yüksektir ancak diğer dağıtımlarda paket isimleri değişebilir.
sudo apt-get install build-essential python-dev libffi-dev libmysqlclient-dev \
libssl-dev libxml2-dev libxslt1-dev
# ev dizinine gir
cd ~
# virtual environment olustur
virtualenv -p python2.7 sozlukcrawler.env
cd sozlukcrawler.env
# aktive et
source bin/activate
# projeyi getir
git clone https://github.com/eren/sozlukcrawler
cd sozlukcrawler
# bagimliliklari yukle
pip install -r requirements.txt
Kurulum yaptıktan sonra sozlukcrawl/settings.py
dosyasından proje ayarlarını düzenleyin.
Proje ORM olarak SQLAlchemy kullanmakta, doğal olarak SQLAlchemy'nin desteklediği bütün veritabanları crawl edilen girdileri saklamak için tutulabilir.
Hızlı bir şekilde kullanmaya başlamanız için öntanımlı olarak sqlite kullanılıyor. Başka veritabanları kullanmak için öncelikle veritabanı ayarlarınızı yapın ve gerekli alanları düzenleyin.
### SQLite
Herhangi bir veritabanı sunucusu kurmak istemiyor ve girdileri dosyaya yazmak istiyorsanız
SQLite sürücüsünü kullanabilirsiniz. Bunun için settings.py
dosyasında açıklamaları bulunan
satır yorumlarını kaldırmanız yeterli.
DATABASE = {
'drivername': 'sqlite',
'database': 'db.sqlite'
}
MySQL sunucunuzda gerekli kullanıcıyı, parolayı, ve veritabanını ekledikten sonra aşağıdaki ayarlar ile MySQL kullanımını etkinleştirebilirsiniz.
DATABASE = {
'drivername': 'mysql',
'host': 'localhost',
'port': '3306',
'username': 'sozlukcrawl',
'password': 'sozlukcrawl',
'database': 'sozlukcrawl'
}
### PostgreSQL Aynı şekilde kullanıcı adını ve veritabanını ayarladıktan sonra aşağıdaki ayarlar ile kullanabilirsiniz.
UYARI: PostgreSQL kullanmaya başlamadan önce psycopg2
paketinin kurulu olması gerekmektedir.
Bunu pip install psycopg2
ile kurunuz.
DATABASE = {
'drivername': 'postgresql+psycopg2',
'host': 'localhost',
'port': '5432',
'username': 'sozlukcrawl',
'password': 'sozlukcrawl',
'database': 'sozlukcrawl'
}
Ekşi, İtü veya Uludağsözlükte ilgilendiğiniz başlığın kök linkini (sayfalama olmaksızın, birinci sayfa) crawler'a vermeniz yeterlidir. Aşağıdaki komutlar ile crawler'ı başlatabilirsiniz.
Öntanımlı olarak konsola sadece INFO
logları düşecektir. Eğer yeterince geek iseniz
ve debug çıktısı görmek istiyorsanız komutun sonuna -L DEBUG
ekleyerek bu çıktıyı
görebilirsiniz.
scrapy crawl eksisozluk -a baslik="https://eksisozluk.com/recep-tayyip-erdogan--95281"
scrapy crawl itusozluk -a baslik="https://www.itusozluk.com/goster.php/recep+tayyip+erdo%F0an"
scrapy crawl uludagsozluk -a baslik="www.uludagsozluk.com/k/recep-tayyip-erdoğan"