Python: İnternetten Veri Çekme ve Google Spreadsheets

Merhabalar. Siz değerli okuyuculara bu yazımda herhangi bir internet sayfasından Python ile veri çekme yolunu ve çektiğimiz veriyi Google Drive Api kullanarak, Google Drive da kullandığımız Spreadsheets’e kaydetme yolunu anlatacağım.

Daha öncesinde bu tarz yazılar yazmıştım ama çok önce, lise zamanlarımda. O zamanlar C# ya da HTML üzerine yazıyordum. Farklı bir isimde blog’um vardı ve orada arkadaşlarıma faydalı olabilecek şeyler paylaşırdım.

Şimdi uzun aradan sonra bu tarz bir şeyler yazmak istedim. Sebebini ise başka bir blog yazımda açıklayacağım. Burada anlatmaya kalkarsam konun dışında uzun bir açıklama gibi kalır. O yüzden pekte anlatımında tecrübeli olmadığım şu işe başlayalım. Amatörcedir. Ciddi şekilde değerlendirmezseniz sevinirim.

Şimdi bu projede lazım olacak araçlar nelerdir? Öncelikle bilgisayarımızda Python kurulu olmalı. Ben Windows işletim sistemi üzerinde işlemleri anlattım. Mac ile aralarında fark yaratacak işlemler mevcut değil. Her iki tarafta zorlanmadan adımları takip edebilir.

Python versiyon 3.4.4 kullanıyorum. Kod editörü olarak herkesin ulaşabileciği seviyede olan Atom’u tercih ettim. Bunların dışında Google hesabınız tabiki olmalı. Ekstra pythonda eklentilerimizi kurmak ve kodumuzu çalıştırmak için CMD bize yeterli olacaktır.

Haydi başlalayalım. Öncelikle google da api oluşturma olayını çözelim. Aşağıda anlaşılır olabilecek şekilde görseller ile anlatmaya çalıştım. Veridğim link üzerinden Google Api Hizmetlerine gidelim.

Hesabımız aktifse aşağıdaki gibi bir sayfa ile karşılacağız.

1 Numaralı yerde eğer daha önce bir proje oluşturmadıysanız “Proje Oluştur” gibisinden bir buton olacak. Ona basıyoruz ve proje oluşturuyoruz.

2 Numaralı yerde ise projemizi oluşturduktan sonra drive api oluşturmak için gerekli işlemleri yapacağız.

3 Numaralı işlem ile etkin olmayan api etkinleştiriyoruz. Daha önce işlemi yaptıysanız zaten etkindir ve “Yönet” seçeneği ile devam edebilirsiniz.

4 Numaralı işlemde, drive api için kendimize bir kimlik oluşturcağız ve iletişimi oluşturuduğumuz kimlik ile sağlayacağız.

İşlemlerinizi yukarıda altlarını çizdiğim şekilde yapınız. Daha sonra ok işareti ile gösterdiğim şekilde devam ediniz.

İkinci aşamada bir isim belirliyoruz. Daha sonra, oluşacak kimliğin hangi rolü üstleneceğini seçiyoruz. Rol kısmında belirttiğim yolda “Sahip ya da Düzenleyici” seçmeniz gerekmekte. Bu şekilde oluşacak kimliğin api üzerinde hangi haklara erişeceğini belirliyoruz ki bize en az “Düzenleyici” yetkisi gerekmekte.

Burda neden üzerine beyaz geçtiysem?

Seçimlerimizi tamamlayıp “Devam” dediğimizde google bize bir “.json” dosyası oluşturuyor. Bu dosyayı çabuk ulaşılabilir bir yere alın. Bir klasörün içerisinde olursa çalışmamız için kolaylık sağlayacaktır ilerleyen aşamada.

.json Dosyasını Atom editörü ile açıyoruz.

Json dosyamızı bir kod editörü ile açalım. İşaretle belirttiğim alandaki e-posta adresini kopyalayın ve gerisine dokunmadan devam edelim.

Şimdi tekrardan Google Drive dönelim ve kendimize bir adet E-Tablo yani spreadsheets oluşturalım. Oluşturduğumuz dökümana anlaşılır ve Türkçe karakter içermeyen bir isim verelim. Daha sonra bu dökümanı json dosyasından kopyaladığımız e-posta adresi ile paylaşalım. Yetkisini ise “Düzenler” olarak seçelim.

Şimdi google drive da dökümanımızı da oluşturduğumuza göre işin python kısmına geliyoruz.

Çalışmada kullanacğımız kütüphaneler en az 2.6 ve 3.+ versiyonları için geçerlidir.

Google driveda bulunan dökümanımza bir internet sayfasından veri çekeceğiz bunun içinde pythona dahil etmemiz gereken araçlar var. Sırasıyla bunları python sürümümüze yükleyelim.

Yükleme işlemlerini CMD kullanarak yapabiliriz. Bunun için CMD yi açın. Daha sonra dosyalarımızı oluşturuduğumuz yere gidelim.

Yukarıda belirtiğim şekilde kurulumları sırasıyla yapabilrisiniz.

Öncelikle : https://www.crummy.com/software/BeautifulSoup/bs4/doc/

BeatifulSoup kuruyoruz.

pip install beautifulsoup4

Daha sonra Urllib3 kurulumunu yapalım

pip install urllib3

Şimdi ise Google Drive da ki dökümanımızla ileşim kurmamızı sağlayacak başka bir eklentiyi daha kuralım.

gspread: https://github.com/burnash/gspread

pip install gspread

İlerleyen aşamada işlemlerimizin çıktılarını kendi ekranımızda da yazdırmak için bir eklenti daha kuruyoruz.

pip install pprint

Ve son olarak google’ın python işlemleri için paketini kuruyoruz: https://developers.google.com/sheets/api/quickstart/python

pip install --upgrade google-api-python-client

Bütün kurulumları başarılı şekilde tamamladıktan sonra kod editörünü açalım ve eklentilerimizi çalışmamıza dahil edelim. Ben “veriler.py” adında bir dosya oluşturdum ve bu dosya içerisinde işlemlerimi yapacağım.

from bs4 import BeautifulSoup
import urllib.request
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pprint

Şimdi öncelikle hangi siteden hangi veriyi istiyoruz ona bakalım. Benim buradaki amacım sizlere sadece ufak bir kırıntı bırakmak. Yolu takip edip nerelere gidersiniz orası size kalmış. Amacım sadece kafanızda fikir oluşturmak.

Genelde google da “internetten veri çekme” adı altında oluşturulan yazıların içinde ya hava durumu alınır ya da borsadan para bilgileri. Bizde borsadan bitcoin ‘in son durmunu alalım.

Kullanıcağım site: https://www.doviz.com/bitcoin (Anlaşmam yok reklam almadım)

Siteye girdiğimizde istediğimiz verinin üzerine gelip > sağ tık yapalım ve > incele diyelim. Google bize bir pencere açacak. Açılan pencerede istediğimiz verinin kod panelinde nerede olduğunu buluyoruz.

Yukarıda belirtiğim alanlara dikkat edelim. Burada bize “span” ve “color-red” alanları lazım olacak. İstediğimiz veri bu bölüm içerisinde.

Şimdi kod editörümüze dönelim ve kodlarımızı yazalım.

1# Burada urllib ve beautifulsoup kullanarak bir web sitesinde ki veriye ulaşmaya çalışyoruz, daha sonra onu yazdırlabilir duruma getiriyoruz.

from bs4 import BeautifulSoup
import urllib.request
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pprint
#1
url = "https://www.doviz.com/bitcoin"
url_oku = urllib.request.urlopen(url)
soup = BeautifulSoup(url_oku, 'html.parser')
#Burada "span" ve "color-red" kısımı sitedeki verinin yerini belirtiyor.
vericek = soup.find_all('span',attrs={'class':'color-red'})

url kısmına verisini çekeceğimiz sitenin tam adresini yerleştiriyoruz. Daha sonra “vericek” kısmıda tam olarak bilginin sitede nerede olduğunu belirtiyoruz.

2# Bu kısımda ise Google ile bağlantımızı sağlayacak kodları ekliyoruz.

from bs4 import BeautifulSoup
import urllib.request
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pprint
#1
url = "https://www.doviz.com/bitcoin"
url_oku = urllib.request.urlopen(url)
soup = BeautifulSoup(url_oku, 'html.parser')
#Burada "span" ve "color-red" kısımı sitedeki verinin yerini belirtiyor.
vericek = soup.find_all('span',attrs={'class':'color-red'})

#2
scope = ['https://spreadsheets.google.com/feeds']
#Burada ise google drive api ile oluşturduğumuz ve indirdiğimiz dosyanın adını yazıyoruz (ben adını değiştirdim ! > pythonornek)
creds = ServiceAccountCredentials.from_json_keyfile_name('pythonornek.json', scope)
client = gspread.authorize(creds)
#Burada google drive da oluşturduğumuz dökümanın adını yazıyoruz.
sheet = client.open("veriler").sheet1

Yukarıda belirtmedik istediğim bir şey var. Şimdi Google Drive Api da oluşturduğumuz bir dosya vardı hani içinden e-posta adresi almıştık. O dosyanın adını analaybileceğiniz bir ad ile değiştirin ancak uzantısına dokunmadan. Ben kod içerisinde fark ettiyseniz adını “pythonornek.json” olarak değiştirdim.

Ayrıca yeniden belirteyim bu çalışmalrımız bir klasör içerinde olursa daha iyi olur. Çünkü yukarıda yazdığımız “*.py” kodumuz “*.json” doyasına ulaşması gerek.

Ben “calisma” klasörünü C: içerisinde oluşturudum.

3# Bu aşamada ise google dirve da ki dökümana ulaştıktan sonra seçtiğimiz hücrenin içeriğini çekiyor ve yazdırıyoruz.

from bs4 import BeautifulSoup
import urllib.request
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pprint
#1
url = "https://www.doviz.com/bitcoin"
url_oku = urllib.request.urlopen(url)
soup = BeautifulSoup(url_oku, 'html.parser')
#Burada "span" ve "color-red" kısımı sitedeki verinin yerini belirtiyor.
vericek = soup.find_all('span',attrs={'class':'color-red'})
#2
scope = ['https://spreadsheets.google.com/feeds']
#Burada ise google drive api ile oluşturduğumuz ve indirdiğimiz dosyanın adını yazıyoruz (ben adını değiştirdim !)
creds = ServiceAccountCredentials.from_json_keyfile_name('pythonornek.json', scope)
client = gspread.authorize(creds)
#Burada google drive da oluşturduğumuz dökümanın adını yazıyoruz.
sheet = client.open("veriler").sheet1
#3
pp=pprint.PrettyPrinter()
#hücreye gidiyoruz ve içini yazdırıyoruz
result = sheet.cell(1, 1).value
pp.pprint(result)

4# Son aşamada ise hücredeki verileri siteden çektiğimiz veri ile güncelliyoruz-değiştiyoruz.

from bs4 import BeautifulSoup
import urllib.request
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pprint
#1
url = "https://www.doviz.com/bitcoin"
url_oku = urllib.request.urlopen(url)
soup = BeautifulSoup(url_oku, 'html.parser')
#Burada "span" ve "color-red" kısımı sitedeki verinin yerini belirtiyor.
vericek = soup.find_all('span',attrs={'class':'color-red'})
#2
scope = ['https://spreadsheets.google.com/feeds']
#Burada ise google drive api ile oluşturduğumuz ve indirdiğimiz dosyanın adını yazıyoruz (ben adını değiştirdim !)
creds = ServiceAccountCredentials.from_json_keyfile_name('pythonornek.json', scope)
client = gspread.authorize(creds)
#Burada google drive da oluşturduğumuz dökümanın adını yazıyoruz.
sheet = client.open("veriler").sheet1
#3
pp=pprint.PrettyPrinter()
#hücreye gidiyoruz ve içini yazdırıyoruz
result = sheet.cell(1, 1).value
pp.pprint(result)
#4
#cektigimiz veri ile hücreyi degistirelim
sheet.update_cell(1,1, vericek[0].text)

Buraya kadarki aşamaları doğru şekilde yaptıysak doğru sonuçarı almamız lazım. CMD satırlarına şu kodu yazalım ve çalıştıralım.

python veriler.py
Görüldüğü üzere verimiz dökümana başarılı şekilde eklendi.

Evet buraya kadar adımları takip edip başarılı sonuç alan okuyucuları tebrik ediyorum. Amacım bu yazıda preofesyonellere birşey göstermek değildi. Amacım, kod yazmaya merakı yeni başlayan, python merak salıp bir şeyler yapmak isteyen arkadaşlarımız için bir kırıntı olmak, bir yolun ufak bir yön göstergesi olmak. Kendimde bu yolda halen kırıtıları takip ediyorum. Amatör sayılırım.

Yukarıdaki işlemleri nasıl kullanacağınız tamamen hayal gücünüze bağlı. Borsa verilerini günlük haftalık çekip bir bilgi birikimi oluşturup bir grafiğe döküp projelerinizide, sunumlarınızda kullanabilir ya da işin daha detaylı versiyonları ile başka kapıları açabilrisiniz.

Umarım faydalı, işe yarar bir yazı olmuştur. Hayal kurmaktan ve hayalleri gerçeğe dönüştürmekten vaz geçmeyelim.

GitHub : https://github.com/osmanesad/googledirve_api

Not: Bu yazıyı hazırlamamda banda da katkısı olan:

Teşekkürler.