• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

네이버 주식 한글깨짐문제

18.07.16 14:51 작성 조회수 697

0

코드에 오타가 있나 싶어 깃헙 작성하신거 고대로 붙여도 네이버 주식 top10은 한글이 깨지네요 ㅠ

제가 작성한 코드이고

from bs4 import BeautifulSoup
import urllib.request as req
import sys
import io

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')

url = "http://finance.naver.com/sise/"
res = req.urlopen(url).read()
soup = BeautifulSoup(res, "html.parser")

top = soup.select("#siselist_tab_0 > tr")
i = 1
for e in top:
    if e.find("a") is not None:
        print(i,e.select_one(".tltle").string,"=",e.select_one("td:nth-of-type(5)").string)
        i += 1

출력결과입니다.

1 ½ÅÀÏ»ê¾÷ = 1,885
2 ÄÉÀ̾¾¿¡½º = 5,350
3 ¼¼Á¾¸ÓƼ¸®¾óÁî = 425
4 ¿»·ÎÆäÀÌ = 127
5 ƼÄÉÀ̾¾ = 20,500
6 ÀÚºñ½º = 4,890
7 ¼öÁ¨ÅØ = 25,350
8 Å×Å©Æ®·£½º = 7,270
9 ¾ÓÃ÷ = 2,150

다음 주식, 인프런 예제는 잘됐는데 네이버만 깨지네요 ㅠ 확인 부탁드립니다.

답변 5

·

답변을 작성해보세요.

1

파크님의 프로필

파크

2018.08.10

res = req.urlopen(url).read().decode('euc-kr')
코드를 이렇게 해도 '네이버 한글 깨짐문제' 오류 해결되네요.

0

KyungHwan Kim님의 프로필

KyungHwan Kim

2018.07.27

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

으로 변경하세요.

response 에 대해 decode합니다.

respone 의 캐릭터셋이 euc-kr 입니다.

이걸 파이썬에서 사용할 수 있도록 디코드해서 utf-8 로 변경합니다.

0

WonBok Lee님의 프로필

WonBok Lee

질문자

2018.07.18

어제는 강의를 못들어서 답장이 늦었습니다
강사님 코드 그대로 붙여놔도 한글이 깨져서 나옵니다 ㅠㅠ
atom과 vs code의 차이점일수도 있을까요?
아 그리고 error처리에서요

except OSError as e:
    if e.errno != errno.EEXIST:
        print("Failed to create directory!!!!!")
        raise

errno.EEXIST의 errno에서 undefined variable errno라고 나오는데요 검색해보면 사용법은 맞는것 같은데
pylint때문에 발생하는 에러일까요?

0

안녕하세요.

res.decode('euc-kr','replace').encode('utf-8','replace') 이 부분은 굳이 필요하지 않은 코드 같습니다.

인코딩 캐릭터셋 자체가 utf8 로 넘어오기 때문에 굳이 불필요한 코드가 추가 되지 않았는지 또는

제가 올린 소스코드로 다시 한 번 검토 부탁드립니다.

네이버는 기본적으로 utf8을 사용합니다.

열심히 하시는 모습 보기 좋습니다.

감사합니다.

0

WonBok Lee님의 프로필

WonBok Lee

질문자

2018.07.16

검색해서 아래 같이 바꾸니까 되는데요 네이버만 왜 이렇게 되는지 궁금하네요~

url = "http://finance.naver.com/sise/"

res = req.urlopen(url).read()

content = res.decode('euc-kr','replace').encode('utf-8','replace')

soup = BeautifulSoup(content, "html.parser")