오늘은 Perl 프로그래밍의 웹 스크레이핑 방법에 대해 설펴보겠습니다. Perl의 텍스트 처리와 정규 표현식으로 웹 스크레이핑 환경을 구축하고, 실제 데이터 추출 방법까지 정리해 보려 합니다.
Perl 프로그래밍 언어로 웹 스크레이핑하기
웹 스크레이핑(Web Scraping)은 인터넷상의 웹 페이지에서 원하는 데이터를 자동으로 추출하는 기술입니다. Perl은 텍스트 처리와 정규 표현식에 강력한 기능을 제공하여 웹 스크레이핑 작업에 적합한 언어입니다.
모듈 설치
Perl의 CPAN(Comprehensive Perl Archive Network)을 통해 웹 스크레이핑에 필요한 모듈을 설치합니다.
cpanm LWP::UserAgent
cpanm HTML::TreeBuilder
cpanm HTTP::Cookies
- LWP::UserAgent: HTTP 요청을 생성하는 모듈입니다.
- HTML::TreeBuilder: HTML 파싱을 돕는 모듈입니다.
- HTTP::Cookies: 쿠키 관리를 위한 모듈입니다.
Perl 웹 스크레이핑
간단한 HTTP 요청 보내기
Perl로 웹 페이지를 가져오는 기본 예제입니다.
use strict;
use warnings;
use LWP::UserAgent;
my $url = 'https://example.com';
# LWP::UserAgent 객체 생성
my $ua = LWP::UserAgent->new;
# HTTP GET 요청
my $response = $ua->get($url);
if ($response->is_success) {
print "웹 페이지 내용:\n";
print $response->decoded_content; # HTML 내용 출력
} else {
die "요청 실패: " . $response->status_line;
}
- `LWP::UserAgent->new`: HTTP 요청을 보내는 객체를 생성합니다.
- `$ua->get($url)`: 지정된 URL로 GET 요청을 보냅니다.
- `$response->is_success`: 요청이 성공했는지 확인합니다.
- `$response->decoded_content`: 응답에서 HTML 콘텐츠를 가져옵니다.
위 코드를 `scrape_basic.pl` 파일로 저장한 후 다음 명령어로 실행합니다.
perl scrape_basic.pl
HTML 파싱 및 데이터 추출
HTML 문서에서 특정 데이터 추출하기
HTML 구조를 분석하여 특정 데이터를 추출합니다. 예를 들어, 웹 페이지의 제목(>title>)을 가져오는 코드를 작성합니다.
use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder;
my $url = 'https://example.com';
my $ua = LWP::UserAgent->new;
my $response = $ua->get($url);
if ($response->is_success) {
my $html_content = $response->decoded_content;
# HTML 파서 생성
my $tree = HTML::TreeBuilder->new;
$tree->parse($html_content);
# >title> 태그 추출
my $title = $tree->look_down('_tag', 'title')->as_text;
print "페이지 제목: $title\n";
$tree->delete; # 메모리 해제
} else {
die "요청 실패: " . $response->status_line;
}
- `HTML::TreeBuilder->new`: HTML 문서를 파싱하는 객체를 생성합니다.
- `$tree->look_down('_tag', 'title')`: `>title>` 태그를 검색합니다.
- `as_text`: 태그 안의 텍스트 내용을 반환합니다.
고급 웹 스크레이핑
동적 웹 페이지 스크레이핑
동적 웹 페이지는 JavaScript를 통해 데이터를 로드합니다. 이를 처리하려면 Selenium과 같은 도구를 사용해야 합니다. Perl에서는 `WWW::Selenium` 모듈을 사용할 수 있습니다. Selenium WebDriver와 함께 사용하려면 다음과 같은 추가 설정이 필요합니다.
Selenium 설정 방법
1) Selenium 설치
- WebDriver 설치: ChromeDriver 또는 GeckoDriver 다운로드
- Perl 모듈 설치
cpanm Selenium::Remote::Driver
2) Perl 스크립트에서 Selenium 사용
- 동적 콘텐츠를 로드하고 데이터를 추출할 수 있습니다.
쿠키 및 세션 처리
로그인이 필요한 웹 페이지를 처리하려면 쿠키를 관리해야 합니다.
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
my $url = 'https://example.com/login';
my $ua = LWP::UserAgent->new;
# 쿠키 관리 객체 생성
my $cookies = HTTP::Cookies->new;
$ua->cookie_jar($cookies);
# 로그인 요청
my $response = $ua->post($url, {
username => 'your_username',
password => 'your_password',
});
if ($response->is_success) {
print "로그인 성공\n";
# 이후 요청에서 쿠키 사용
my $protected_page = $ua->get('https://example.com/protected');
print $protected_page->decoded_content;
} else {
die "로그인 실패: " . $response->status_line;
}
- `HTTP::Cookies->new`: 쿠키를 저장하고 관리하는 객체를 생성합니다.
- `$ua->cookie_jar($cookies)`: HTTP 요청에 쿠키를 포함합니다.
- `$ua->post($url, {...})`: POST 요청으로 로그인 데이터를 전송합니다.
'프로그래밍 언어 > Perl' 카테고리의 다른 글
Perl 병렬 처리 fork와 threads 모듈로 성능 최적화 - Perl #10 (0) | 2024.12.12 |
---|---|
Perl 프로그래밍 CPAN 모듈 설치와 Perl 패키지 활용법, 네임스페이스 충동 방지 방법 - Perl #8 (0) | 2024.12.04 |
Perl 서브루틴, 함수 호출부터 반환값까지 이해하기 - Perl #7 (0) | 2024.11.27 |
Perl 입출력 기본부터 활용까지 파일 모드와 예제 코드 - Perl #6 (0) | 2024.11.26 |
Perl 프로그래밍 문자열 처리 및 정규 표현식 - Perl #5 (0) | 2024.11.25 |