1 min read

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')