프로그래밍 언어/Perl

Perl 웹 스크레이핑 기초 HTML 파싱과 로그인 처리 - Perl #9

eco7T 2024. 12. 9. 10:05
반응형

오늘은 Perl 프로그래밍의 웹 스크레이핑 방법에 대해 설펴보겠습니다. Perl의 텍스트 처리와 정규 표현식으로 웹 스크레이핑 환경을 구축하고, 실제 데이터 추출 방법까지 정리해 보려 합니다.

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 요청으로 로그인 데이터를 전송합니다.
반응형