가끔 사이트 개발을 하거나 여러가지 데이터를 모으기 위해 웹페이지를 파싱해야할 경우가 있죠. 다양한 언어와 기법을 활용하여 웹페이지 파싱이 가능한데요. 저는 주로 PHP를 활용하여 웹페이지 스크랩하고 정규표현식을 통해 파싱 작업을 하고 있습니다. 그 내용을 간단하게 요약해 보도록 하죠.
파싱 대상 html 가져오기
1. echo file_get_contents(웹페이지 URL); => 서버 설정으로 막힌 경우가 많음.
2. curl (스누피라는 라이브러리 쓰면 좀 편함)
3. fsocketopen (최종 방법)
파싱할 때 주로 쓰는 함수 5가지
1. str_replace(".", "", $string); // . 삭제
2. $language = preg_replace( '/[^a-zA-Z_]/', '', $_REQUEST['language'] ); // 정규식으로 치환
3. preg_match_all('/[가-힣a-zA-Z0-9 ]*/i', $resultHtml, $find_words); => 그냥 preg_match 하면 1개만 가져옴
4. explode("-", "2017-09-20");
5. substr("테스트", 1, 2); => 스트
6. strip_tags("<b>테스트</b>")
7. print_r($array); => 배열 출력
정규표현식 상식
. => 모든 문자, .*? : 모든문자 최초매칭
greedy vs non-greedy (최대매칭 vs 최초매칭 => 조건이 만족되는 최초의 위치까지만 일치하는 것으로 간주 / ?를 사용함)
() : 그룹, [] : 범위
정규표현식 예시
preg_replace("/[#\&\+\-%@=\/\\\:;,\.'\"\^`~\_|\!\?\*$#<>()\[\]\{\}]/i", "", $title); // 특수문자 제거, 공백은 포함
/["[가-힣a-zA-Z0-9 ]*",/i
/\[[가-힣a-zA-Z0-9]*\]/
/[0-9,]+건/
/[0-9.]*[0-9.]/
/[0-9-]*[0-9-]/
/([0-9]{3}cm)/i
/([0-9]{2,3}kg)/i
/([A-Z]{1,2}형)/i
/^(to|cc|bcc|Reply-To)$/
/[^A-Za-z0-9!#$%&'*+\/=?^_`{|}~ -]/
/Location:\s([^\s]*)\s/
/(src|background)=["'](.*)["']/Ui
/^Get(\w+Service)$/I
결국 웹페이지 파싱 작업은 첫 번째로 웹페이지를 어떻게 스크랩할 것인가 그리고 두 번째로 가져온 html 데이터를 어떻게 파싱해서 데이터를 추출할 것인가에 달려 있는 것 같습니다. 첫 번째 부분은 어느 정도 정형화되어 있기 때문에 한 번만 잘 소스를 만들어두면 계속 재사용할 수 있으며 두 번째 부분은 웹페이지 구조를 얼마나 잘 분석하고 정규표현식을 잘 활용하여 데이터를 뽑아내는가에 달려 있는 것 같습니다.
'Dev Talks > Back-End Dev' 카테고리의 다른 글
페이스북 API 연동 및 개발 방법 정리 (0) | 2019.02.02 |
---|---|
구글 API 사용법, 키 발급, OAuth 인증 방법 정리 (1) | 2019.02.02 |
phpMyAdmin 에 csv 파일 import 방법 및 에러 대처 (0) | 2017.09.13 |
phpmyadmin 용량 제한 해제 방법 (0) | 2017.08.17 |
php 자주 쓰는 함수 정리 (0) | 2017.06.17 |
댓글