• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

인코딩 + 403 Forbidden 질문입니다.

21.07.09 00:23 작성 조회수 130

0

download 2-8-2 코드 작성할 때 인프런의 추천강좌의 글 + 그림을 저장하는 코드입니다.

for i, e in enumerate(img_list, 1):
    with open(savePath+"text_"+str(i)+".txt","wt") as f:
    # 저장할 경로에 "text_순번.txt"의 이름으로 텍스트를 저장한다. 텍스트 쓰기 모드 (wt)
        f.write(e.select_one("div.card-content > div.course_title").string)

    fullFileName = os.path.join(savePath, savePath+str(i)+'.png')

    imgUrl = e.select_one("div.card-image > figure > img")['src']
    base = rep.urljoin(imgUrl, "../../../../../")

    parseUrl = rep.urlparse(imgUrl).path
    path = rep.quote(parseUrl)

    fullURL = rep.urljoin(base, path)

    request_url = req.Request(fullURL, None, headers)
    response_url = req.urlopen(request_url)
    f = open(fullFileName, 'wb')
    f.write(response_url.read())
    f.close()

    #req.urlretrieve(fullURL, fullFileName)

이 코드를 실행할 때 그림을 불러올 때 일부의 그림 주소가 한글로 인코딩 되어 있어서 그냥 단순히 그림의 주소로 urlretrieve를 실행하면 UnicodeEncodeError: 'ascii' codec can't encode characters in position 70-75: ordinal not in range(128)

가 발생합니다.

때문에 한글 인코딩을 바꿔주고자 이미지 주소의 path 부분을 추출해서 path 부분만 인코딩해주고 url을 합쳐주고 retrieve를 실행하면 403 forbidden 에러가 뜹니다.

여기에 헤더를 추가하는 방법을 구글링해서 찾아봐서 저렇게 추가했지만 403 forbidden이 사라지지 않습니다.

문제가 되는 사진의 주소입니다.

https://cdn.inflearn.com/public/courses/324995/course_cover/efab1490-0082-446a-b173-52108106bfc1/%EC%9D%B8%ED%94%84%EB%9F%B0-%EA%B5%90%EC%9E%AC%ED%8C%90%EB%A7%A4-%EB%8C%80%EB%AC%B8.jpg
https://cdn.inflearn.com/public/courses/324995/course_cover/efab1490-0082-446a-b173-52108106bfc1/%25EC%259D%25B8%25ED%2594%2584%25EB%259F%25B0-%25EA%25B5%2590%25EC%259E%25AC%25ED%258C%2590%25EB%25A7%25A4-%25EB%258C%2580%25EB%25AC%25B8.jpg

위로 접속하면 정상 접속이 됩니다.

아래로 접속하면 (인코딩 후) 엑세스가 거부됩니다.

어떻게 해결할 수 있을까요?

답변 1

답변을 작성해보세요.

0

안녕하세요.

개발자도구로 현재 이미지 주소를 정확하게 확인해 보시고

인코딩한 주소와 비교해 보세요!

굳이 인코딩 하지 않아도 quote 만 사용해서 호출하면 ascii 에러는 나지 않을 수 있어요!