requests 쓰려는데 latin-1[i] error 가 뜨면서 스크랩핑이 안 된다. 우짤꼬...

도모_땃쥐·2021년 9월 24일
0

발단

분명 다른 py 파일에서는 잘만 동작하던 session.get(url) 이 몇 시간 째 latin 이 아니라며 발광하는 모습이다. 정신나갈것같아...

XX! 분명 py 파일 여러개 만들어서 스크랩핑 할 때만해도 멀쩡히 동작하던 스크랩핑의 친구 session = requests.Session() 이 막상 정말로 API 구현을 시도하니 첫 단계부터 에러를 뿜어낸다. url에 encode 도 해 보고 decode 도 해 보며 살려보려 하지만 session 은 살아날 기미가 보이지 않는다...

어디부터 잘못된거지?

전개

우선 개발자의 친구 구글이 아닌 stackOverflow 를 뒤적여본다. 우리 친구 스택오버플로우는 utf-8 로 인코드와 디코드를 어찌어찌 하면 될 것이라고 한다. 그래서 url에 encode("utf-8") 메소드를 끼워본다.

"야 너 ascii 아니잖아. 꺼져." 라고 말하는 모습니다. 눈나내가뭘잘못한거야,,,

Jaaaaaaaa;val 안된다. 우리의 친구는 아니고 도구 requests 는 친절하게도 UnicodeDecodeError 라고 알려주며 "거 'ascii' 는 byte 0xec 를 해결할 수 없어요~" 라고 알려준다. (이 때는 이게 뭔 소린지 몰랐다.) 그래서 다른 py 파일을 뒤적여본다. 그리고 단 하나의 차이를 알아냈다. 그것은 '한글'의 유무였다.

다른 py 파일은 변수에 숫자나 영어만 들어갔는데, 한국에서 쓸 코드는 변수에 한글이 들어갔다. 그 변수가 url 로 고대로 들어가고, 코쟁이들은 라틴어 외에는 문자란 없다는 듯이 만들어 배포한 session 친구는 한국어를 알아듣지 못해 오류를 뿜어내고야 만 것이다. 이런! (아니 한국어가 안되면 일본어하고 중국어 처리도 안된다는 건가? 이게 시상에 말이여 빙구여...)

무튼 이제 길이 보인다. 검색을 바꿔본다. "requests utf-8 미지원"

절정

검색하다 마음이 바뀌었다. 결국 한글을 ascii 로 바꿔야 하는데 뭉태기로 바꾸는 건 안되는 것 같단 말이지. 그리고 한참을 해멨다.  encode 대체 어떻게 하는거야!!! 라고 생각하며 저녁을 먹고 다시 컴퓨터 앞에 앉았다. 앉아서 오만짓을 다 해도 원하는대로 불러와지지를 않고, 이것저것하다 '아예 원래 api url을 통으로 넣었을 때, 그래도 안 되는걸까? 이게 되면 header 문제는 아니고 url 문제인게 확실해지는 거잖아?' 라는 생각이 들었다. 원래의 url 을 그대로 사용하여 session에 넣어서 요청을 보냈다. 결과는, 잘 왔다.

이로써 header 는 더 이상 문제가 아님을 확인하였다. 그리고 원래 url을 print 해보니, 한글이 들어가는 딱 그 지점에서 url이 '끊겨' 있었다. 왠지 이거 url 문제인것만 같아진 나는 어느새 구글에 'url encode python' 을 치고 있었다. 그리고...

유레카!

결말

유...유레카.... 파이썬은 역시 라이브러리만 믿고 달리는 거구나 싶다. JS쓰다 파이썬쓰면 이런것 때문에 정신나갈것같으면서도 라이브러리 찾아서 적용시킬 때마다 하 오늘도 하나 어떻게 끝은 냈다 싶어서 다행스럽다. 무튼 하루종일 고생해서 얻은게 urllib 라는 게 허탈하기는 하지만 utf-8 과 ascii 와 convert 에 대해 뼈저리게 '이렇게 하지 말아야지'를 느낄 수 있는 좋은 시간이었다. (는 개뿔 어차피 이제 크롤링한 json 개떡진거 하나씩 어떻게 풀어야할지 검색 주구장창 해야한다.) 무튼 이 글을 읽는 당신은 절대 나와 같은 허망한 짓은 하지 말고 urllib 의 힘을 빌어 빠르게 코딩을 마칠 수 있기를 바란다.

도움받은 사이트

1. 인코딩 - 디코딩을 순식간에 해 주는 사이트 (여기가 제일 낫다)

2. utf-8 -> ascii 힌트를 얻은 게시글

3. 다시 한 번 유레카!

profile
이것저것하는 사람. 주로 python과 야바스크립트.

0개의 댓글