루나의 TIL 기술 블로그

파이썬 크롤링시 한글 깨짐, 엔코딩 덮어씌우기

|

목적

사용자가 게시판에 링크 입력 시 뉴스 페이지에서 제목과 썸네일 등을 끌어올 때 한글 깨짐을 예방한다.

해결방법: ‘EUC-KR’ 엔코딩을 덮어씌운다


headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(url, headers=headers, timeout=3)

if data.encoding not in ['euc-kr', 'utf-8']:
    data.encoding = 'EUC-KR'

soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one('meta[property="og:title"]')
image = soup.select_one('meta[property="og:image"]')
desc = soup.select_one('meta[property="og:description"]')

시행착오의 흔적


charset = soup.select_one('meta[http-equiv="Content-Type"]')
print('charset', charset)

charset2 = charset.attrs("charset")
print('charset2', charset2)

# charset.get('content')[charset.get('content').find("charset="):]

charset3 = charset.get('content')[charset.get('content').find("charset="):].replace('charset=', '')
print('charset3', charset3)

charset4 = soup.headers.get_content_charset()
print('charset4', charset4)

# res = req.urlopen(url).read().decode(req.urlopen(url).headers.get_content_charset())
# req.urlopen(url).headers.get_content_charset()

# soup = BeautifulSoup(data.content.decode('utf-8', 'replace'), 'html.parser')