본문 바로가기

오늘 배운 내용

파이썬의 정규식 : Python RegEx와 requests 간단하게 배워보자 (웹스크랩핑 or 크롤링 1)

 

웹스크랩핑 및 웹크롤링을 하기 이전에

 

파이썬의 정규식에 대하여 간단하게 공부를 하고자 한다.

 

본격 공부에 들어가기에 앞어서 웹스크랩핑 혹은 크롤링을 하기 위해서는

 

웹에대한 정보를 가져와야하는데, 이 웹에 대한 정보를 가져오는 라이브러리가 requests 라는 라이브러리다.

 

따라서 python 터미널에서

"pip install requests" 를  작성해서 requests 라이브러리를 설치한다.

 

설치 후 밑에 코드를 보고 간단히 적용해보자

import requests

res = requests.get("http://google.com")
print("응답코드 : ", res.status_code) # 200 이면 정상(웹에 접근할 수 있는 권한)
res.raise_for_status() #밑의 if문과 같은것
# if res.status_code == requests.codes.ok:
#     print("정상입니다")
# else:
#     print("문제가 생겼습니다.[에러코드 ", res.status_code, "]")

print(len(res.text))

with open("mygoogle.html", "w", encoding="utf8") as f:
    f.write(res.text)

import requssts를 하여서 requests 라이브러리를 불러오고

res라는 변수에 requests.get 함수를 사용하여 웹 정보를 받아올 웹 주소를 입력한다.

 

그러나 웹에 따라서 접근권한이 있을 수도 있으며, 없을수도 있기 때문에

"res.raise_for_status()"라는 함수를 이용한다 !

"res.raise_for_status()" 함수는 위의 코드의 if 문에서 <수행할 문장>을 뺀것과 같다.

 

print(len(res.text))는 우리가 받은 웹 정보의 글자 갯수를 출력하는 코드이며,

 

with open("mygoogle.html", "w", encoding="utf8") as f:

위의 코드는 "mygoogle.html" 이라는 파일을 만드는데,

"w" 쓰기모드로 만들고,

encoding="utf8" 인코딩하며,

f 라고 부르겠다 라는걸 의미하며

 

f.write(res.text)

res.text라는걸 f파일에 써서 만든다고 보면 됩니다 !

 

자, 이제 그럼 본격 정규식으로 넘어가 봅시다 !

 

정규식을 쓸 때 
1. p = re.compile("원하는 형태") 
2. m = p.match("비교할 형태") : 주어진 문자열의 처음부터 일치하는지 확인 
3. m = p.search("비교할 형태") : 주어진 문자열 중에 일치하는게 있는지 확인 
4. lst = p.findall("비교할 문자") : 일치하는 모든 것을 "리스트"형태로 반환 

원하는 형태 : 정규식 
# . (ca.e) : 하나의 문자를 의미한다. | care, cafe, case, ... 
# ^ (^de) : 문자열의 시작을 의미한다. | desk, destination, ... 
# $ (se$) : 문자열의 끝을 의미한다. | base, case, ..... 

정규식에 대하여서 더 공부를 하고싶다 하면 
구글 => w3school 검색 > 사이트 접속 > 맨 아래 learn python 클릭 >  Python RegEx 클릭 
혹은 python re 검색 > 파이썬 공식문서 홈페이지에서 확인

 

밑에 코드를 보면서 이해해 봅시다 !

import re

p = re.compile("ca.e")
# . (ca.e) : 하나의 문자를 의미한다. | care, cafe, case, ...
# ^ (^de) : 문자열의 시작을 의미한다. | desk, destination, ...
# $ (se$) : 문자열의 끝을 의미한다. | base, case, .....

def print_match(m):
    if m:
        print("m.group() : ", m.group()) # 일치하는 문자열을 반환
        print("m.string : ", m.string) # 입력받은 문자열을 반환
        print("m.start() : ", m.start()) # 일치하는 문자열의 시작 index
        print("m.end() : ", m.end()) # 일치하는 문자열의 끝 index
        print("m.span()", m.span()) # 일치하는 문자열의 시작 / 끝 index
    else:
        print("매칭되지 않았습니다.")

m = p.match("careless") # 주어진 문자열의 처음부터 일치하는지 확인
print_match(m)
print(m.group()) # 매치되지 않을 경우 에러 발생

m = p.search("careless") # 주어진 문자열 중에 일치하는게 있는지 확인
print_match(m)
#
lst = p.findall("good care cafe") # findall : 일치하는 모든 것을 리스트 형태로 반환
print(lst)




# 정규식을 쓸 때
# 1. p = re.compile("원하는 형태")
# 2. m = p.match("비교할 형태") : 주어진 문자열의 처음부터 일치하는지 확인
# 3. m = p.search("비교할 형태") : 주어진 문자열 중에 일치하는게 있는지 확인
# 4. lst = p.findall("비교할 문자") : 일치하는 모든 것을 "리스트"형태로 반환

# 원하는 형태 : 정규식
# . (ca.e) : 하나의 문자를 의미한다. | care, cafe, case, ...
# ^ (^de) : 문자열의 시작을 의미한다. | desk, destination, ...
# $ (se$) : 문자열의 끝을 의미한다. | base, case, .....

# 정규식에 대하여서 더 공부를 하고싶다 하면
# 구글 => w3school 검색 > 사이트 접속 > 맨 아래 learn python 클릭 >  Python RegEx 클릭
# 혹은 python re 검색 > 파이썬 공식문서 홈페이지에서 확인

위에 코드를 보면 알 수 있듯,

import re 코드를 입력하여서, 정규식 라이브러리를 쓸 수 있게 선언합니다.

p = re.compile("ca.e") 라는 코드는 p 라는 변수에 "ca.e"라는 정규식을  컴파일 한다 라는걸 의미합니다

여기서 "." 대신 "^", "$"을 쓸 수 있으며 쓰는 용도는 위에 코드에 따로 주석처리 하여놨습니다 !

 

def print_match(m): 코드는 print_match라는 함수를 정의하는데 변수받는 변수를 함수 내에서 m이라 하겠다 라는 의미입니다.

if m: 이코드는 m받는 변수가 참일경우 밑에 수행문 실행

else: 의 코드는 if문의 코드가 모두 거짓일 경우 실행하는 것을 의미합니다

 

m = p.match("ca.e") 의 의미는 변수 m에 p값의 match함수를 대입한다는 의미입니다. (여기서 p는 위에 선언된 정규식)

print(m.group())의 코드는 매칭이 되었는지 출력하는 코드입니다

 

m = p.search("careless") 의 의미는 변수 m에 p값의 search함수를 대입한다는 의미입니다.

 

 

자, 정규식 같은경우는 생각보다 매우 깊은 영역이기에 깊게 다루면 다룰수록 복잡합니다.

따라서 웹스크랩핑 혹은 웹크롤링에서 필요한 아주 기본적인 지식만 배우고 넘어갑시다 !