Thursday, March 01, 2007
Perl/펄 정규식] HTML 파일, 문자열(타이틀), URL 추출; UTF-8 Regex
"유니코드(UTF-8)" 인코딩으로 된 HTML 파일에서, 링크의 제목과 URL을 추출하는 예제입니다.
많은 수의 HTML 또는 일반 텍스트 파일을 자동으로 처리할 때 요긴합니다.
우선 준비물로서, 아래 박스의 내용을 test.html 이라는 유니코드(UTF-8) 파일로 저장합니다. test.html 파일의 HTML링크에서, URL과 제목만 추출하여, out.txt 라는 별도의 파일로 저장하겠습니다.
테스트용으로 사용할 파일의 내용: test.html
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
(이 소스 파일도, UTF-8 인코딩으로 저장합니다.)
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
이제 위의 스크립트를 실행시키면 out.txt 라는 유니코드 파일이 생성되고 그 내용은 다음과 같습니다:
출력 결과 파일 out.txt 의 내용:
HTML 링크에서, URL과 제목만 추출된 것입니다.
▶▶ Perl/펄 정규식] HTML 태그 속의 텍스트, URL 링크 추출; Regex
많은 수의 HTML 또는 일반 텍스트 파일을 자동으로 처리할 때 요긴합니다.
우선 준비물로서, 아래 박스의 내용을 test.html 이라는 유니코드(UTF-8) 파일로 저장합니다. test.html 파일의 HTML링크에서, URL과 제목만 추출하여, out.txt 라는 별도의 파일로 저장하겠습니다.
테스트용으로 사용할 파일의 내용: test.html
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
<div id="AIListLinks">
<div class="AIListDate">Thursday, December 29, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/05-misc.html">Q&A - '05 Misc</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/qna.html">[QnA] 옥상에 빨간벌레가 있어요</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/factorial-table-1100-0-100.html">수학] 팩토리얼 계산 표; Factorial Table 1~100 (0에서 100)까지 계승(階乘)</a></div>
<div class="AIListDate">Sunday, December 25, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/html_25.html">소설 HTML 수정</a></div>
<div class="AIListDate">Saturday, December 24, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/arabic-number-to-german-spell.html">독일어 숫자 읽기, 아라비아 숫자를 독어로 세기; Arabic Number To German Spell</a></div>
<div class="AIListDate">Wednesday, December 21, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/natural-logarithm-of-n-log-factorial.html">수학] 팩토리얼의 자연 로그 표; Natural Logarithm of n!, Log Factorial Table</a></div>
<div class="AIListDate">Tuesday, December 20, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/gmail-ms-html.html">Gmail 에서 MS워드를 HTML 로 보기 지원</a></div>
<div class="AIListDate">Friday, December 16, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/gallery-ftp.html">야후 지오시티의 Gallery 를 FTP 로 업데이트</a></div>
<div class="AIListDate">Thursday, December 15, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/activex.html">ActiveX(액티브 엑스) 의 추억</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/blog-post.html">야후! 블로그 사용기</a></div>
<div class="AIListDate">Wednesday, December 07, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/hardware-software-os.html">하드웨어란? 소프트웨어란? 운영체제란? : Hardware / Software / OS</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/18002300-leap-year-list.html">윤년 표/목록 (서기 1800년~2300년까지) : Leap Year List</a></div>
<div class="AIListDate">Monday, December 05, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/fibonacci-sequence-list.html">피보나치 수열 리스트; Fibonacci Sequence List</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/excel-vba-unicode-string-size.html">Excel/엑셀 VBA] 유니코드 문자열 바이트 수 구하기 함수; Unicode String Size</a></div>
<div class="AIListDate">Sunday, December 04, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/random-range-min-max-javascript.html">자바스크립트] 특정 범위의 숫자(정수) 랜덤 출력: Random Range Min Max JavaScript</a></div>
<div class="AIListDate">Saturday, December 03, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/c-vc-is-file-hidden.html">C언어 VC] 숨김 속성, 히든 파일 여부 판단 함수; is File Hidden?</a></div>
<div class="AIListDate">Friday, December 02, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/c-scientific-notation.html">C언어] 실수의 지수 표기법 (Scientific Notation;과학적 표기법)</a></div>
<div class="AIListDate">Thursday, December 01, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/excel-vba-lenmbcs-lenb-ansi-string.html">Excel/엑셀 VBA] LenMbcs, LenB, 한글 완성형 문자열 바이트 수 구하기 함수; ANSI String Size</a></div>
</div>
<div class="AIListDate">Thursday, December 29, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/05-misc.html">Q&A - '05 Misc</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/qna.html">[QnA] 옥상에 빨간벌레가 있어요</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/factorial-table-1100-0-100.html">수학] 팩토리얼 계산 표; Factorial Table 1~100 (0에서 100)까지 계승(階乘)</a></div>
<div class="AIListDate">Sunday, December 25, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/html_25.html">소설 HTML 수정</a></div>
<div class="AIListDate">Saturday, December 24, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/arabic-number-to-german-spell.html">독일어 숫자 읽기, 아라비아 숫자를 독어로 세기; Arabic Number To German Spell</a></div>
<div class="AIListDate">Wednesday, December 21, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/natural-logarithm-of-n-log-factorial.html">수학] 팩토리얼의 자연 로그 표; Natural Logarithm of n!, Log Factorial Table</a></div>
<div class="AIListDate">Tuesday, December 20, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/gmail-ms-html.html">Gmail 에서 MS워드를 HTML 로 보기 지원</a></div>
<div class="AIListDate">Friday, December 16, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/gallery-ftp.html">야후 지오시티의 Gallery 를 FTP 로 업데이트</a></div>
<div class="AIListDate">Thursday, December 15, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/activex.html">ActiveX(액티브 엑스) 의 추억</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/blog-post.html">야후! 블로그 사용기</a></div>
<div class="AIListDate">Wednesday, December 07, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/hardware-software-os.html">하드웨어란? 소프트웨어란? 운영체제란? : Hardware / Software / OS</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/18002300-leap-year-list.html">윤년 표/목록 (서기 1800년~2300년까지) : Leap Year List</a></div>
<div class="AIListDate">Monday, December 05, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/fibonacci-sequence-list.html">피보나치 수열 리스트; Fibonacci Sequence List</a></div>
<div class="AIListDate"></div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/excel-vba-unicode-string-size.html">Excel/엑셀 VBA] 유니코드 문자열 바이트 수 구하기 함수; Unicode String Size</a></div>
<div class="AIListDate">Sunday, December 04, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/random-range-min-max-javascript.html">자바스크립트] 특정 범위의 숫자(정수) 랜덤 출력: Random Range Min Max JavaScript</a></div>
<div class="AIListDate">Saturday, December 03, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/c-vc-is-file-hidden.html">C언어 VC] 숨김 속성, 히든 파일 여부 판단 함수; is File Hidden?</a></div>
<div class="AIListDate">Friday, December 02, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/c-scientific-notation.html">C언어] 실수의 지수 표기법 (Scientific Notation;과학적 표기법)</a></div>
<div class="AIListDate">Thursday, December 01, 2005</div>
<div style="margin-bottom:3px;"><a href="http://mwultong.blogspot.com/2005/12/excel-vba-lenmbcs-lenb-ansi-string.html">Excel/엑셀 VBA] LenMbcs, LenB, 한글 완성형 문자열 바이트 수 구하기 함수; ANSI String Size</a></div>
</div>
문자열 추출 예제 소스: 유니코드(UTF-8) HTML 파일에서
파일명: example.pl(이 소스 파일도, UTF-8 인코딩으로 저장합니다.)
※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;
use utf8;
# 입출력 파일 2개를 유니코드(UTF-8) 인코딩으로 열기
open IN, "<:encoding(UTF-8)", "test.html";
open OUT, ">:encoding(UTF-8)", "out.txt";
my @in = <IN>; # test.html 파일을 통째로 배열 @in 에 넣기
chomp @in; # 각 문자열 끝의 개행문자 제거
my ($title, $link); # 제목과, 링크 주소(URL)가 저장될 변수
foreach (@in) { # 배열에 든 파일의 각 행들에 대해 작업
# 링크에서, 타이틀만 찾아서 추출 저장
# </a>를 <\/a> 로 표현하지 않으면
# Bareword found where operator expected at.. 라는 에러가 남
if (/<div style="margin-bottom:3px;"><a href=".*">(.*)<\/a><\/div>/) {
$title = $1;
print OUT $title, "\n";
}
# 링크에서, URL만 찾아서 추출 저장
if (/<div style="margin-bottom:3px;"><a href="(.*)"/) {
$link = $1;
print OUT $link, "\n\n";
}
}
close IN; close OUT; # 파일 닫기
use strict; use warnings;
use utf8;
# 입출력 파일 2개를 유니코드(UTF-8) 인코딩으로 열기
open IN, "<:encoding(UTF-8)", "test.html";
open OUT, ">:encoding(UTF-8)", "out.txt";
my @in = <IN>; # test.html 파일을 통째로 배열 @in 에 넣기
chomp @in; # 각 문자열 끝의 개행문자 제거
my ($title, $link); # 제목과, 링크 주소(URL)가 저장될 변수
foreach (@in) { # 배열에 든 파일의 각 행들에 대해 작업
# 링크에서, 타이틀만 찾아서 추출 저장
# </a>를 <\/a> 로 표현하지 않으면
# Bareword found where operator expected at.. 라는 에러가 남
if (/<div style="margin-bottom:3px;"><a href=".*">(.*)<\/a><\/div>/) {
$title = $1;
print OUT $title, "\n";
}
# 링크에서, URL만 찾아서 추출 저장
if (/<div style="margin-bottom:3px;"><a href="(.*)"/) {
$link = $1;
print OUT $link, "\n\n";
}
}
close IN; close OUT; # 파일 닫기
이제 위의 스크립트를 실행시키면 out.txt 라는 유니코드 파일이 생성되고 그 내용은 다음과 같습니다:
출력 결과 파일 out.txt 의 내용:
Q&A - '05 Misc
http://mwultong.blogspot.com/2005/12/05-misc.html
[QnA] 옥상에 빨간벌레가 있어요
http://mwultong.blogspot.com/2005/12/qna.html
수학] 팩토리얼 계산 표; Factorial Table 1~100 (0에서 100)까지 계승(階乘)
http://mwultong.blogspot.com/2005/12/factorial-table-1100-0-100.html
소설 HTML 수정
http://mwultong.blogspot.com/2005/12/html_25.html
독일어 숫자 읽기, 아라비아 숫자를 독어로 세기; Arabic Number To German Spell
http://mwultong.blogspot.com/2005/12/arabic-number-to-german-spell.html
수학] 팩토리얼의 자연 로그 표; Natural Logarithm of n!, Log Factorial Table
http://mwultong.blogspot.com/2005/12/natural-logarithm-of-n-log-factorial.html
Gmail 에서 MS워드를 HTML 로 보기 지원
http://mwultong.blogspot.com/2005/12/gmail-ms-html.html
야후 지오시티의 Gallery 를 FTP 로 업데이트
http://mwultong.blogspot.com/2005/12/gallery-ftp.html
ActiveX(액티브 엑스) 의 추억
http://mwultong.blogspot.com/2005/12/activex.html
야후! 블로그 사용기
http://mwultong.blogspot.com/2005/12/blog-post.html
하드웨어란? 소프트웨어란? 운영체제란? : Hardware / Software / OS
http://mwultong.blogspot.com/2005/12/hardware-software-os.html
윤년 표/목록 (서기 1800년~2300년까지) : Leap Year List
http://mwultong.blogspot.com/2005/12/18002300-leap-year-list.html
피보나치 수열 리스트; Fibonacci Sequence List
http://mwultong.blogspot.com/2005/12/fibonacci-sequence-list.html
Excel/엑셀 VBA] 유니코드 문자열 바이트 수 구하기 함수; Unicode String Size
http://mwultong.blogspot.com/2005/12/excel-vba-unicode-string-size.html
자바스크립트] 특정 범위의 숫자(정수) 랜덤 출력: Random Range Min Max JavaScript
http://mwultong.blogspot.com/2005/12/random-range-min-max-javascript.html
C언어 VC] 숨김 속성, 히든 파일 여부 판단 함수; is File Hidden?
http://mwultong.blogspot.com/2005/12/c-vc-is-file-hidden.html
C언어] 실수의 지수 표기법 (Scientific Notation;과학적 표기법)
http://mwultong.blogspot.com/2005/12/c-scientific-notation.html
Excel/엑셀 VBA] LenMbcs, LenB, 한글 완성형 문자열 바이트 수 구하기 함수; ANSI String Size
http://mwultong.blogspot.com/2005/12/excel-vba-lenmbcs-lenb-ansi-string.html
http://mwultong.blogspot.com/2005/12/05-misc.html
[QnA] 옥상에 빨간벌레가 있어요
http://mwultong.blogspot.com/2005/12/qna.html
수학] 팩토리얼 계산 표; Factorial Table 1~100 (0에서 100)까지 계승(階乘)
http://mwultong.blogspot.com/2005/12/factorial-table-1100-0-100.html
소설 HTML 수정
http://mwultong.blogspot.com/2005/12/html_25.html
독일어 숫자 읽기, 아라비아 숫자를 독어로 세기; Arabic Number To German Spell
http://mwultong.blogspot.com/2005/12/arabic-number-to-german-spell.html
수학] 팩토리얼의 자연 로그 표; Natural Logarithm of n!, Log Factorial Table
http://mwultong.blogspot.com/2005/12/natural-logarithm-of-n-log-factorial.html
Gmail 에서 MS워드를 HTML 로 보기 지원
http://mwultong.blogspot.com/2005/12/gmail-ms-html.html
야후 지오시티의 Gallery 를 FTP 로 업데이트
http://mwultong.blogspot.com/2005/12/gallery-ftp.html
ActiveX(액티브 엑스) 의 추억
http://mwultong.blogspot.com/2005/12/activex.html
야후! 블로그 사용기
http://mwultong.blogspot.com/2005/12/blog-post.html
하드웨어란? 소프트웨어란? 운영체제란? : Hardware / Software / OS
http://mwultong.blogspot.com/2005/12/hardware-software-os.html
윤년 표/목록 (서기 1800년~2300년까지) : Leap Year List
http://mwultong.blogspot.com/2005/12/18002300-leap-year-list.html
피보나치 수열 리스트; Fibonacci Sequence List
http://mwultong.blogspot.com/2005/12/fibonacci-sequence-list.html
Excel/엑셀 VBA] 유니코드 문자열 바이트 수 구하기 함수; Unicode String Size
http://mwultong.blogspot.com/2005/12/excel-vba-unicode-string-size.html
자바스크립트] 특정 범위의 숫자(정수) 랜덤 출력: Random Range Min Max JavaScript
http://mwultong.blogspot.com/2005/12/random-range-min-max-javascript.html
C언어 VC] 숨김 속성, 히든 파일 여부 판단 함수; is File Hidden?
http://mwultong.blogspot.com/2005/12/c-vc-is-file-hidden.html
C언어] 실수의 지수 표기법 (Scientific Notation;과학적 표기법)
http://mwultong.blogspot.com/2005/12/c-scientific-notation.html
Excel/엑셀 VBA] LenMbcs, LenB, 한글 완성형 문자열 바이트 수 구하기 함수; ANSI String Size
http://mwultong.blogspot.com/2005/12/excel-vba-lenmbcs-lenb-ansi-string.html
HTML 링크에서, URL과 제목만 추출된 것입니다.
▶▶ Perl/펄 정규식] HTML 태그 속의 텍스트, URL 링크 추출; Regex
tag: perl
Perl | 펄
tag: regex
정규식 | 정규표현식 | Regex | Regular Expression
tag: html
HTML | CSS | 자바스크립트 JavaScript
<< Home