[python 04] 예외처리, 크롤링
set 집합
• 구분기호 : ()
• set 키워드
• 중복을 허용하지 않는다
• 어떤것이 존재하는지 여부를 판단하기 위해 주로 사용
• 교집합 intersection, 합집합 union, 차집합 diffrence
• 구조
변수 = set(리스트, 문자열, 튜플, 딕셔너리)
☑ 합집합 : &
☑ 교집합 : |
☑ 차집합 : -
예외처리
☑ 예러의 예
IOError | 파일 오픈할 수 없을때 등 i/o |
IndexError | 인덱스번호 오류 |
ImportError | import한 모듈 찾을 수 없을때 |
ValueError | 값이 적절하지 못할때 |
ZerodivisionError | 0으로 나누기할때 |
FileNotFoundError | 파일 없는 경우 |
SyntaxError | 문법 오류 |
EOFError | end of file 더이상 읽어올 내용이 없을 때 발생 |
☑ 구조
try:
에러 발생할 것 같은 코드들
except
에러 발생할때 실행할 코드들
모듈과 패키지
모듈?
• 내장함수와 같이 모듈 또한 파이썬이 제공하는 표준 모듈이 있다
• 모듈은 클래스, 함수, 변수 등으로 구성된다
• 별도의 .py 파일로 존재
크롤링 Crawling
• 스크래핑 : 웹사이트 또는 다른곳에서 특정정보를 추출하는 기능
• 크롤링 : 웹 사이트를 돌명서 정보를 주기적으로 가져오는 기능
• 크롤러, 스파이더 : 알고리즘에 의해서 인터넷을 탐색하여 클로링하는 프로그램, 한마디로 크롤링 하는것 Ex) 검색엔진
• 서버를 어떤 구조로 구성되어 있는지 분석하여 원하는 정보만 가져오기
☑ 클라이언트 : 서비스 요청하는 프로그램
☑ 서버 : 서비스 제공해주는 프로그램
▪ 종류
∙영상제공
∙파일
∙도메인
∙채팅 음성 게임 전자우편 웹서버
☑ 클라이언트가 서버에 데이터 요청할때 크게 4가지 타입으로 요청하는데 CRUD
∙ Create 쓰기 ⇨ POST
∙ Read 읽기 ⇨ GET
∙ Update 수정 ⇨ PUT
∙ Delete 삭제 ⇨ DELETE
☑ 헤더
▪ 요청 헤더 Request Headers : 클 -> 서버 요청 정보
∙ User-agent(브라우저 정보), Method(요청 메소드), Referer(요청 이전에 머물렀던 주소)
▪ 응답 헤어 Response Headers : 서버 -> 클 응답 정보
∙ Status-code (응답코드)
▪ 엔티티 : 메세지에 해당하는 정보를 포함하는 헤더
∙ Content-Type(entity-body의 미디어타입) text문서인지 json인지 css인지 규정해 놓는것
☑ 데이터전송
▪ 리소스 경로 : REST API
▪ 쿼리스트링 : URL뒤에 ?
▪ header body : url로 전송 데이터 확인 불가
👀 크롤링 하기전에 데이터가 정적인지 동적인지 구조를 파악해야 한다. 데이터 구조에 따라 사용하는 기능이 달라지기 때문에
웹 크롤러
웹에 접속해서 데이터를 받아오는 것
1 - 웹페이지 요청
2 - 요청 결과를 파이썬에서 사용가능한 형태로 변환(파싱) : 라이브러리 필요
✔ urllib 라이브러리 사용하기
☑ 정적 데이터 ver
1. 라이브러리 import
from urllib.request import Request, urlopen
▸urllib 패키지 안에 request 모듈 안에서 Request객체와 urlopen함수를 사용하겠다.
2. 요청할 페이지 주고
3. 요청
3-1. url 주며 요청객체 생성
3-2. 요청객체 주며 페이지 요청
** 객체가 아니라 다이렉트로 주소를 넣어서 줘도 됨
❔ [SSL:Certificate_verify_failed....] Error 발생 ⇨ SSL을 못찾겠다. https 페이지 요청했을 경우 (보안페이지여서)
import ssl context = ssl.create_unverified_context() # context 정보 담아오기 urlopen(req, context=context) # url 요청할때마다 속성을 직역해주면 SSL 인증서까지 포함되서 넘어가기 때문에 요청이 정상적으로 처리 됨
4. html 꺼내기 ▸ 바이너리 코드로 꺼내짐
resp.read()
☑ POST 요청
import urllib
# POST 방식으로 전송할 데이터
data = {"key1":"value1", "key2":"value2"}
data = urllib.parse.urlencode(data) #딕셔너리를 쿼리스트링의 형태로 바꿔준다
data = data.encode("utf-8")
print(data)
# 요청객체 만들기 : url, 요청시데이터, headers
req_post = Request(url, data=data, headers={})
page = urlopen(req_post)
print(page.code)
print(page.url)
☑ GET 요청
# Request() 객체 생성시 , 두번째 인자값이 존재하면 -> POST
# 두번째 인자가 None 또는 생략하면 -> GET
req_get = Request(url+"?key1=value1&key2=value2", None, headers={})
☑ 파일 다운받기 : urllib.request > urlretrieve()
from urllib.request import urlretrieve
url ="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"
name = "googleLogo.png" # 저장할 이미지 경로 + 이름.확장자
urlretrieve(url, name)
requests
• 파이썬에서 HTTP 요청을 보낼때 많이 사용되는 모듈
• 라이브러리 추가 설치 필요
BeautifulSoup
• HTML의 태그를 파싱해서 필요한 데이터만 추출하는 함수를 제공하는 라이브러리
• 요청X, 결과 html코드를 파이썬이 쓸 수 있는 코드로 파싱
• urllib + bs or requests + bs
• 라이브러리 추가 설치 필요
• bs4
Ex) '<h1> hello </h1>' ⇨ <h1> hello </h1>
💡파싱
문자열을 원하는 형태로 변환
라이브러리 설치
• pip install ... (환경변수 설정필요)
• 파이참에서 pip 통해 설치
File ▹ Settings ▹ Project: workspace ▹ Python Interpreter ▹ + ▹ 패키지명 검색 ▹install