Python 3 ile HTTP Connection
Python 3 ile uzak bir siteden veri çekmek için kullanabileceğiniz bir çok kütüphane bulunmaktadır. Bu yazıda Python 3 içerisinde bulunan urllib kütüphanesini kullanarak uzak siteden veri çekeceğiz.
Urllib ile ilgili dokümantasyona buradan ulaşabilirsiniz. https://docs.python.org/3.4/library/urllib.html
Urllib içinde yer alan modüllerden biri olan request modülünü projemize dahil edelim.
#!/usr/bin/env python3 import urllib.request
Modülü kolaylıkla kullanabilmek için bir değişkene aktarıyorum ve uzak siteyle bağlantı kurmak için urlopen metodunu kullanıyorum. Bu metot ile ilgili detaylı bilgiye buradan ulaşabilirsiniz.
url = urllib.request connection = url.urlopen('http://enesgur.com.tr')
connection değişkenini ekrana bastığımızda şöyle bir sonuç çıkacaktır.
<http.client.HTTPResponse object at 0x7fb53291d940>
Gerekli bağlantı sağlandıktan sonra çıktıyı okumak için read metodunu kullanacağız.
content = connection.read()
Bu kodu ekrana bastığımızda aşağıdaki gibi bir sonuç çıkacaktır, ve Türkçe karakterler sorun verecektir. Örnek;
b'<!DOCTYPE html>\n<html lang="tr-TR">\n<head>\n<meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <title>Enes G\xc3\xbcr ~ Bir Yaz\xc4\xb1l\xc4\xb1mc\xc4\xb1n\xc4\xb1n Ki\xc5\x9fisel \xc5\x9eeysi</title>
Görüldüğü gibi bazı kaçış karakterleri ve dönüşme uğramış Türkçe karakterler yer almakta. Bu sorunu çözmek için Python içerisinde yer alan decode metodundan yararlanacağım. İncelemek için Python Dokümantasyonunu inceleyebilirsiniz.
content = content.decode('utf-8')
Ekran çıktısında kaçış karakterleri ve Türkçe harflerin görüntülendiğini göreceksiniz. Böylelikle temiz bir html çıktısı elde etmiş olduk.
<!DOCTYPE html> <html lang="tr-TR"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Enes Gür ~ Bir Yazılımcının Kişisel Şeysi</title>
Uygulamanın kodlarını toparlayacak olursak;
#!/usr/bin/env python3 import urllib.request url = urllib.request connection = url.urlopen('http://enesgur.com.tr') content = connection.read() content = content.decode('utf-8')