블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2010.01.03 16:25

[ Perl ] Cafe Crawler

  RSS 를 제공해주지 않는 Naver/Daum Cafe 를 어떻게 해볼까 하는 심정으로 만든 자질구레한 스크립트를 늦게서야 소개합니다. 
  
  

  기본적인 Perl 스크립팅 지식이 있으신 분들과 Perl 에 관심있는 분들에게 도움이 되었으면 합니다. 
  다음이나 네이버 카페를 긁어서 풀 컨텐츠의 RSS 파일로 만들어 줍니다.  원래는 개인용도로 사용해왔지만, 더이상 사용할 일이 없을 것 같아서, 이렇게 올립니다. 

신고
IT/Perl 2008.06.24 17:06

[ Perl ] 간단한 웹페이지 스크랩핑 - Web::Scraper

 일반적으로 웹 페이지를 스크래핑할 때 정규표현식에 대한 이해는 필수입니다.
 페이지를 싸그리 통채로 스크랩하는 거야 물론 간단하지만, 페이지의 일부분을 도려내고 싶을 때는 정규표현이 없으면 헤맬 수 밖에 없습니다.

 그리고 정규표현은 가독성이 단점입니다. 어중간한 정규표현이야 괜찮겠지만... 어떤 정규표현을 보고, 이게 뭐하는 것인지 알아내기란 참으로 힘든 일일 겁니다.

 use LWP::Simple;

my $content = get("http://www.daum.net");
my ($title) = $content =~ /<title>(.+)<\/title>/i;

print $title;
 < 어중간하게 쉬운 정규표현의 예 : 웹페이지의 제목 을 얻어내는 스크립트 >

use Web::Scraper;
use URI;
 
my $html = scraper {
  process 'title', title => 'TEXT';
}->scrape(URI->new("http://www.daum.net"));

print $html->{title};
 < 정규표현을 사용하지 않은 예 >

 이런 간단한 예제에서는 Web::Scraper 가 지는 것은 당연하겠죠. :-)
 차이가 있다면 문자코드입니다. 정규표현을 사용한 예제에서는 해당페이지에서 사용하고 있는 문자코드(다음의 경우에는 euc-kr)로 결과가 나오게 되지만, Web::Scraper 를 사용했을 때는 모든 결과는 반드시 UTF-8 으로 반환됩니다.
  늦었지만 이 쯤에서 Web::Scraper 에 대한 자세한 이야기.
  모듈의 저자는 일본의 유명한 Perl Hacker 인 Miyagawa 씨입니다. 전 작년 Shibuya.pm Tech Talk 에서 이 내용을 처음 접하고 꽤나 빠져들었던 기억이 납니다.
  이 모듈의 구성은 Ruby 의 Scrapi 라는 스크래핑 툴에서 차용했다고 합니다.

THIS MODULE IS IN ITS BETA QUALITY. THE API IS STOLEN FROM SCRAPI BUT MAY CHANGE IN THE FUTURE

  라고 Web::Scraper 페이지에 가면 나옵니다. 그리고 어떤 특별한 문서도 없이 Scrapi API 문서를 참조하시면 됩니다.

  아아.. 그러고 보니 이런 설명은 왠지 필요없을 지도...

  Web::Scraper 의 Slide에서 쉽게 볼 수 있습니다. 그쪽의 내용이 직관적이고 여러가지 예제들도 있으니 쉽게 쓸 수 있을 것입니다.

  그러고보니 Firefox 확장으로 WebScraper IDE 라는 것도 있으니, 보다 쉬운 웹 스크래핑이 가능하지 않을까 생각되네요.

  WebScraper IDE (for Firefox3)


  여기까지 보시고도 잘 모르시겠다는 분은 없겠죠?

  혹, 잘 모르시겠다면, 댓글이나 IRC에 들러주셔서 같이 한번 궁리해보았으면 합니다. :-)

  나중에 이를 적용한 예제를 몇가지 올려보도록 하겠습니다.

신고
TOTAL 474,069 TODAY 23

티스토리 툴바