Nis 032015
 
4.557 views

Python mechanize ile Türkçe karakter çözümü

Python Dersleri 004 – Mechanize paketi ile Türkçe erişim

Python mechanize ile Türkçe karakter çözümü

Bu dersimizde, mechanize paketi kullanarak Türkçe karakter sorununu çözüyoruz.

Ayrıca, PyCharm üzerinden paket ekleme ve kaldırma işlemlerinin nasıl yapıldığını da yine bu dersimizde işliyoruz.

[youtube https://www.youtube.com/watch?v=1jNCrY07ck0&w=560&h=315]

Türkçe karakter sorununun çözümünün aslında mechanize paketinden değil, bu paket aracılığıyla kolayca tanımlanabilen “headers” parametrelerinden kaynaklandığını belirtmekte yarar var. Headers bilgilerini tanımlamanıza izin veren tüm paketler, Türkçe karakter sorununuzu çözmenizde yardımcı olacaktır.

Kritik bilgiler şunlar:
(‘Accept-Language’, ‘tr,en-us,en;q=0.5’),
(‘Accept-Charset’, ‘cp1254,ISO-8859-9,utf-8;q=0.7,*;q=0.7’)

Yeri gelmişken, python sürümleri ile ilgili bir kaç noktaya değinmekte yarar var.

Bildiğiniz gibi, daha fazla kaynak bulunabildiği için, derslerimizi python 2 serisi üzerinden sürdürüyoruz. Ancak python grubu, asıl enerjisini python 3 üzerine yoğunlaştırmış durumda. Bu nedenle, python yolculuğu aslında üçüncü kulvar üzerinden yeni ufuklara ulaşmayı planlıyor. Bunu unutmamakta yarar var.

Derslerimizde her iki seride de çalışabilecek kodlara yer vermeye çalışacağım. Mechanize bu açıdan uygun bir paket değil ne yazık ki! Mechanize ekibi, kodlarını python 3 serisine uyarlamayı düşünmüyor. Bazı fork denemeleri var, ama yeterince destekleri bulunmuyor.

Python 3 için mechanize paketine bir alternatif olarak MechanicalSoup öneriliyor. MechanicalSoup paketine aşağıdaki linkten ulaşabilirsiniz:

https://www.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Fhickford%2FMechanicalSoup&h=8AQGqTvIl

Dördüncü dersimizde işlediğimiz kodların tamamı aşağıda yer alıyor:

# -*- coding: utf-8 -*-
import mechanize
import re

#url ='http://www.bbc.com'
url ='http://www.milliyet.com.tr'

br = mechanize.Browser()
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Browserin takılmasını önlemek için
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)

#Header bilgilerini tanımlamak
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0'),
                 ('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'),
                 ('Accept-Language', 'tr,en-us,en;q=0.5'),
                 ('Accept-Charset', 'cp1254,ISO-8859-9,utf-8;q=0.7,*;q=0.7')]
ob = br.open(url)

page = ob.read()
#Buradan itibaren tüm kodlar bir önceki derstekinin aynısıdır
print (len(page))

#regex='div class="grid_5.*?">(.+?)</div>'
regex='div class="cHaber.+?">(.+?)</div>'

pattern = re.compile(regex)
haber=re.findall(pattern,page)
print (len(haber))
i = 0
while i < len(haber):
    detay=haber[i]

    pattern=re.compile('href="(.+?)"')
    haberlink=re.findall(pattern,detay)

    pattern2=re.compile('<a.*?>(.+?...)</a>')
    habertext=re.findall(pattern2,detay)
    print ("link  =",haberlink[0])
    print ("kategori=",habertext[0])
    if len(habertext)>1:
        print ("baslik=",habertext[1])
    if len(habertext)>2:
        print ("ozet  =",habertext[2])
    j=2
    while j<len(habertext):
        print ("detay  =",habertext[j])
        j+=1
    print ("")

    i+=1

Bir sonraki dersimizde görüşmek üzere!

Beni izlemeyi unutmayın!

ahmet aksoy

  5 Yanıt - “Python mechanize ile Türkçe karakter çözümü”

  1. İyi günler kodu direkt alıp çalıştımayı denedim ancak iki konuda hata aldım ilki
    UserWarning: gzip transfer encoding is experimental!
    br.set_handle_gzip(True)
    Şeklinde
    İkincisi ise Türkçe karakter sorunu düzelmedi. Neden olabileceği ile ilgili yardımcı olabilirseniz sevinirim.

    • İlk uyarı kulladığınız sistemle ilgili olabilir. O satırı silip deneyebilirsiniz. Kritik bir bilgi içermiyor.
      Türkçe sorununuzun çözülmemesi kodlarda kullanılan parametrelerle ilgili olabilir.
      Hem br.set_handle_??? satırlarını, hem de br.addheaders(…) parametreleriyle oynayarak sonuç almayı deneyebilirsiniz.
      Ben bu kodları windows7 üzerinde test ettim.
      ahmet aksoy

  2. Merhaba Ahmet Bey,
    Bende windows 7 üzerinde sizin kodlarınızı derledim fakat türkçe karakter sorunu düzelmedi. addheaders(…) parametreleriylede oynadım fakat türkçe karakterler gelmiyor. Yardımcı olabilir misiniz. Teşekkür ederim.

    • Hangi python sürümünü kullanıyorsunuz?
      Eğer hala 2.7 ile çalışıyorsanız en azından 3.4’e geçmenizi öneririm.
      Ben Python 3.5 ile çalışıyorum ve Türkçe karakter sorununu neredeyse hiç yaşamıyorum.

      • Python 3.4 kullanıyorum.
        Teşekkür ederim.
        Sorunu html.parser modülüyle hallettim. Ve html.parser kesin çözüm hiç bir sorun çıkarmıyor.

 Bir yanıt bırakın

Bu HTML tagleri ve özellikleri kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(gerekli)

(gerekli)

This site uses Akismet to reduce spam. Learn how your comment data is processed.