이제 데이터 공부 안하는 블로그

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 14회차 미션 본문

파이썬

[패스트캠퍼스 수강 후기] 파이썬 인강 100% 환급 챌린지 14회차 미션

공사노비 2020. 11. 15. 23:24




13일차

 

오늘은 어제에 이어 스크래핑에 대해 좀더 알아 보았습니다. 

지난 시간에 urlretrieve함수를 사용해보았는데 오늘은 비슷하지만 다른 urlopen을 이용해서 코드를 작성해 보았습니다. 그리고 에러 처리 까지 함께 코딩했습니다. 

 

코드를 한번 보겠습니다. 에러처리를 위해 라이브러리에서 url에러와 http에러를 잡아주는 메쏘드를 호출해 줍니다. 

ex)from urllib.error import URLError, HTTPError

 

어제와 조금 다른점은 list 형식으로 데이타를 받아온것입니다. 어제는 각각의 변수를 선언해서 이미지 파일하나와 인덱스를 받아왔었는데 오늘은 리스트에 한번에 넣어주었습니다. 이 리스트에 내가 원하는 파일의 경로를 넣어주고 나중에 값을 넣어 주면 됩니다. 

ex)path_list = ["c:/test1.jpg", "c:/index.tmil"]

 

리스트를 사용했기 때문에 for 반복문을 사용해서 내용을 넣어주고 예외처리도 함께 했습니다. 

ex) for i, url in enumerate(taget_url):

   

urlopen함수는 urlretrive와 달리 직접 파일을 받아와서 저장하지는 않습니다. 대신에 그 파일을 열어서 변수에 리턴해 줍니다. 그리고 받은 파일의 내용을 이용할수있습니다. 

ex)response = req.urlopen(url)

     contents = response.read()

이렇게 read메쏘드를 사용해서 내용을 가져 옵니다. 

가져온 내용을 for 반복문을 사용해서 처음 지정해준 리스트의 파일을 만들어서 넣어줍니다.  

ex)with open(path_list[i], 'wb') as c:

            c.write(contents)

이렇게 해주면 맨처음 list의 경로에 원하는 파일과 인덱스를 적어 넣어주게 됩니다. 파일을 열어 쓰는 부분은 앞의 기초부분에서 학습했는데 쓰려고 하니 잘 기억이 안나 몇번을 더 보았습니다. 

c.write로 쓰는 부분도 뭔소린지 잠시 헤맸어요. c는 path_list[i]였습니다. wb명령으로 쓰기 권한을 준 파일하나를 만들고 열어서 content변수에 있는 내용을 넣어주는 겁니다. 

 

그리고 에러처리를 위해 try문을 사용했습니다. 

여기서 에러처리는 HTTPError와 URLError입니다. 

자세한 설명은 해주지는 않았고 위의 함수가 처리해주는 에러에 대해서는 구글링해서 찾아봐야 합니다. 

URLError는 url을 불러올때 생기는 여러가지 에러의 reason을 알려줍니다. 정확히 어떤 값인지는 잘모르겠습니다. 

HTTPError는 urlerror의 서브 클래스 라고 합니다. 

from 구글링) 예외가 아닌 파일류 반환 값(urlopen()의 반환 값과 동일한 값)으로도 작동할 수 있습니다. 이 방법은 인증 요청 같은 독특한(exotic) HTTP 에러를 처리할 때 유용합니다.

이 부분은 앞으로 코딩을 더 연습하면서 에러의 형태를 보게되면 더 자세히 알수있을것 같습니다. 지금은 그냥 강사님이 알려주는 코드를 따라쓰는정도라 에러가 안나니까 모르고 넘어가도록 하겠습니다. 


강의소개 https://bit.ly/33a7nvc