2020. 11. 13. 05:00ㆍPython과 머신러닝/웹 데이터 추출
웹사이트에서 원하는 형태의 데이터를 긁어오는 방법을 알아보자.
0. 요약
1. 원하는 URL을 정한다.
2. URL로부터 모든 text를 string으로 읽어온다.
3. 내가 찾고자 하는 string을 regular expression 형태로 정의한다.
4. re 라이브러리를 사용해서 원하는 text 부분들을 모두 추출한다.
import re
from urllib import request
url="http://www.itemmania.com/notice/view.html?pub=PORTAL&type=all&nowPage=1&id=1542"
html_str=str(request.urlopen(url).read())
#print(html_str)
results = re.findall(r"\w+\*{3}", html_str)
for result in results:
print(result)
-
regular expression(정규표현식)이 뭔지만 이해하고 나면 아주 간단한 작업이다.
-
위 코드의 논리를 한 걸음씩 이해해보자.
1. 원하는 URL을 정한다.
-
이번 예제에서는 다음 URL을 사용해보자 : www.itemmania.com/notice/view.html?pub=PORTAL&type=all&nowPage=1&id=1542
url="http://www.itemmania.com/notice/view.html?pub=PORTAL&type=all&nowPage=1&id=1542"
2. URL로부터 모든 text를 string으로 읽어온다.
from urllib import request
url="http://www.itemmania.com/notice/view.html?pub=PORTAL&type=all&nowPage=1&id=1542"
html_str=str(request.urlopen(url).read())
print(html_str)
-
URL을 변수에 담는다
-
URL로부터 읽은 값을 string 형태로 변환하여 html_str에 담는다
-
string 값을 출력한다
-
아주 간단하지 않은가? 위 코드를 수행하면 해당 페이지의 html source를 string 형태로 전부 받았고,
이를 메모장에 옮겨놓고 검색해보면 아이디가 어디 있는지 확인할 수 있을 것이다.
3. 내가 찾고자 하는 string을 regular expression 형태로 정의한다.
-
Regular Expression(정규표현식)이란, 문자열에서 특정 패턴의 문자열을 추출하기 위한 일종의 공식이다.
-
예를 들어, 위에서 추출한 html 중 사용자들의 ID만 추출하고 싶다면 컴퓨터에게 어떤 명령을 넣어야 할까?
-
말로 표현하면 이럴 것이다 : 알파벳으로 시작하고 ***(별 3개)로 끝나는 문자열을 전부 찾아줘!
-
위와 같은 공식을, 컴퓨터가 알아들을 수 있게 정규적인 표현을 만든 것이 정규표현식의 전부이다.
-
쉽게 말해, '내가 원하는 문자열의 규칙을 컴퓨터에게 알려주기 위한 약속 혹은 규칙'이 정규 표현식이다.
-
정규표현식이 뭔지 이해했다면 '알파벳으로 시작하고 ***(별 3개)로 끝나는 문자열'을 정규 표현식으로 표현해보자
-
\w : 알파벳 한 글자를 찾아줘
-
\w+ : 알파벳 여러 글자 (단어 단위)로 찾아줘
-
\w+\* : 알파벳 단어 뒤에 별이 붙는 문자열을 찾아줘
-
\w+\*{3} : 알파벳 단어 뒤에 별이 3개 붙는 문자열을 찾아줘
-
-
위 결과를 Python 코드로 넣으면 다음과 같다.
-
re는 regular expression 라이브러리이니 참고하면 좋다
import re
from urllib import request
url="http://www.itemmania.com/notice/view.html?pub=PORTAL&type=all&nowPage=1&id=1542"
html_str=str(request.urlopen(url).read())
#print(html_str)
results = re.findall(r"\w+\*{3}", html_str)
(번외 편) Regular Expression 연습 + 검증하기
-
이와 같이 정규표현식의 세상은 생각보다 간단하다. 규칙만 알고, 조금만 연습해보면 얼마든지 적용할 수 있다.
-
정규표현식에 대한 내용은 구글에 얼마든지 많이 나와있으니 원하는 문자열을 위한 표현식은 검색해보자.
-
내가 생각하는 정규표현식을 검증하는 방법은 이렇게 하면 된다
A) 원하는 URL에서 우클릭 -> 페이지 소스 보기를 한다
B) 페이지 소스를 전체 전체 복사한다 (Ctrl A, Ctrl C)
C) www.regexr.com 에 들어가서 중간 본문 부분에 붙여넣는다
D) 상단의 Expression 부분에 생각했던 정규표현식을 입력하고, 기대했던 값들이 나오는지 아래 Tools 영역의 List에서 확인한다.
4. re 라이브러리를 사용해서 원하는 text 부분들을 모두 추출한다.
-
본론으로 돌아와서 마무리를 하자.
-
원하는 정규분포식을 입력하여 원하는 값들을 results 변수에 받았으면, 각각 출력해주면 끝이다.
import re
from urllib import request
url="http://www.itemmania.com/notice/view.html?pub=PORTAL&type=all&nowPage=1&id=1542"
html_str=str(request.urlopen(url).read())
#print(html_str)
results = re.findall(r"\w+\*{3}", html_str)
for result in results:
print(result)
마무리
-
HTML을 읽어서 원하는 문자열을 parsing하여 추출하는 것은 이렇게 간단하다.
-
페이지에서 원하는 값의 패턴만 정의할 수 있다면, 정규표현식으로 python에 요청하면 빠르게 추출할 수 있다.
-
네이버 스토어에서 판매되는 특정 제품의 평균 가격이랄지, 경쟁 상대들의 리뷰 및 판매 수 등등을 파악할 수 있다.
-
이제 웹에서 어떤 데이터도 추출할 수 있으니, 이를 기반으로 빅데이터 분석을 시작해보자.
관련 포스트
- 2020/11/17 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] wget으로 웹 데이터 다운로드 및 파싱 - wget.download
- 2020/11/18 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] 실시간 금융 데이터 파싱하기 추출
- 2020/11/20 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] BeautifulSoup으로 하는 웹크롤링, 데이터 스크레이핑
- 2020/11/23 - [Python과 머신러닝/웹 데이터 추출] - [Python.Web] BeautifulSoup과 wget 으로 웹크롤링, 데이터 스크레이핑
'Python과 머신러닝 > 웹 데이터 추출' 카테고리의 다른 글
[Python.Web] BeautifulSoup과 wget 으로 웹크롤링, 데이터 스크레이핑 (0) | 2020.11.23 |
---|---|
[Python.Web] BeautifulSoup으로 하는 웹크롤링, 데이터 스크레이핑 (0) | 2020.11.20 |
[Python.Web] 실시간 금융 데이터 파싱하기 추출 (0) | 2020.11.18 |
[Python.Web] wget으로 웹 데이터 다운로드 및 파싱 - wget.download (0) | 2020.11.17 |
보일러 플레이트(Boiler Plate) 이해하기 (0) | 2020.10.31 |