웹스크랩핑 및 웹크롤링을 하기 이전에
파이썬의 정규식에 대하여 간단하게 공부를 하고자 한다.
본격 공부에 들어가기에 앞어서 웹스크랩핑 혹은 크롤링을 하기 위해서는
웹에대한 정보를 가져와야하는데, 이 웹에 대한 정보를 가져오는 라이브러리가 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함수를 대입한다는 의미입니다.
자, 정규식 같은경우는 생각보다 매우 깊은 영역이기에 깊게 다루면 다룰수록 복잡합니다.
따라서 웹스크랩핑 혹은 웹크롤링에서 필요한 아주 기본적인 지식만 배우고 넘어갑시다 !
'오늘 배운 내용' 카테고리의 다른 글
파이썬 : Python 웹스크랩핑 or 크롤링 정리 (0) | 2020.08.23 |
---|---|
Python 공부, selenium 공부 : 웹스크랩핑 or 웹 크롤링 관련 (0) | 2020.08.22 |
Python 파이썬으로 파일 만들기 !(csv, 엑셀, txt 등등 데이터 파일) (0) | 2020.08.20 |
파이썬 : Python 웹스크랩핑 or 크롤링 1-1 (user_agent) (0) | 2020.08.19 |
파이썬 : Python 웹스크랩핑 or 크롤링 2 (beautifulsoup4, lxml) (0) | 2020.08.19 |