Türkçe Karakter Problemi

Merhaba,

Web scraping yapıyorum ancak Türkçe karakter problemini çeşitli yöntemler denememe rağmen çözebilmiş değilim. Aşağıda geldiğim yeri görebilirsiniz. Yardımcı olmanızı rica ederim.

#!/usr/bin/python

-- coding: utf-8 --

import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’)

from lxml import html
import requests

url = “web sitesi”

resp = requests.get(url)
tree = html.fromstring(resp.content)

metin = tree.xpath(’//*[@id=“widget_serie_detail_3”]/section/div/div/div[3]/div/h3/text()’)
print(“1”, metin)
print(“2”, metin[0])
print (“3”, metin[0].strip())
replaced = metin[0].replace("\xc3\xb6", “ö”).strip()
#replaced = metin[0].replace("\xc3\xb6", “ö”).encode(‘utf-8’).strip()
print(“4”, replaced)
print (metin[0].encode(‘Windows-1252’,‘replace’))
print (metin[0].encode(‘utf-8’,‘strict’))
#print(metin[0].encode(encoding=“ascii”,errors=“replace”))

Merhaba. Bende konuyla alakalı yeri gelmişken bir soru sorayım.
utf-8 yerine neden cp1254 kodunu kullanmıyoruz ?

Onu da denemiştim ancak sonuç değişmiyor.

Soruna dönersem, belki öneriler için fikir verebilir:

Ekran çıktısını alıp decode ettiğimde Türkçe karakterlerde bozukluk yok ancak metin[0] olarak decode edildiğinde bozuk çıkıyor. Biraz nette karıştırdım, doğrudan list 'in decode edilmesine izin vermiyor, listtostring ile decode ettiğimde de sorun giderilmiyor.

print(“haz\xc4\xb1r olun.\n”.decode(“utf-8”))

Biraz da yardımla aşağıdaki ile sorun artık yaşamıyorum.

#!/usr/bin/python

-- coding: utf-8 --

from lxml import html
from lxml.html import etree
from bs4 import UnicodeDammit
import requests
import chardet

url = “”

resp = requests.get(url)
content = requests.get(url).content

ud = UnicodeDammit(resp.content, is_html=True)

enc = ud.original_encoding.lower()
declared_enc = ud.declared_html_encoding
if declared_enc:
declared_enc = declared_enc.lower()
if (declared_enc and enc != declared_enc):
detect_dict = chardet.detect(resp.content)
det_conf = detect_dict[“confidence”]
det_enc = detect_dict[“encoding”].lower()
if enc == det_enc and det_conf < THRESHOLD_OF_CHARDETECT:
enc = declared_enc
content = resp.content.decode(enc, “ignore”).encode(enc)
htmlparser = etree.HTMLParser(encoding=enc)
root = etree.HTML(content, parser=htmlparser)
etree.strip_elements(root, html.etree.Comment, “script”, “style”)

metin = root.xpath(’’)
print(metin[0].strip())

Koddaki sorun Turkce karakterlerde degil, unicode karakterlerde:

Burada suslu tirnak (, ) yerine ASCII tirnak (') kullanman lazim.

Keza. (, ")