컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
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
<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>



문자열 추출 예제: 유니코드(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; # 파일 닫기



이제 위의 스크립트를 실행시키면 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


HTML 링크에서, URL과 제목만 추출된 것입니다.


▶▶ Perl/펄 정규식] HTML 태그 속의 텍스트, URL 링크 추출; Regex





0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top