basic/python

[python 04] 예외처리, 크롤링

못지(Motji) 2021. 8. 19. 16:18

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