c3nk
Mart 15, 2021, 8:18öö
1
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 ?
c3nk
Mart 15, 2021, 1:25ös
3
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”))
c3nk
Mart 15, 2021, 4:24ös
4
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())
aib
Mart 16, 2021, 10:11öö
5
Koddaki sorun Turkce karakterlerde degil, unicode karakterlerde:
Burada suslu tirnak (‘
, ’
) yerine ASCII tirnak ('
) kullanman lazim.
c3nk:
url = “web sitesi”
Keza. (“
, ”
→ "
)