cURL: 정의 및 웹 스크래핑 활용 방법

cURL은 프로그래머가 데이터 수집 및 전송에 사용하는 다목적 명령어입니다. 하지만 웹 스크래핑에 cURL을 어떻게 활용할 수 있을까요? 이 글이 시작하는 데 도움이 될 것입니다.
1 분 읽기
data collection and web scraping with cURL

이 블로그 글에서 배울 내용:

  • cURL이란 무엇인가요?
  • cURL 사용법
  • cURL이 왜 인기 있는가?
  • 프록시와 함께 cURL 사용하기
  • User-Agent 변경 방법
  • cURL을 사용한 웹 스크래핑

cURL이란 무엇인가요?

cURL은 네트워크 프로토콜을 통해 데이터를 전송하는 데 사용할 수 있는 명령줄 도구입니다. cURL이라는 이름은 ‘Client URL’을 의미하며 ‘curl’로도 표기됩니다. 이 널리 쓰이는 명령어는 URL 구문을 사용하여 서버와 데이터를 주고받습니다. Curl은 무료이며 사용하기 쉬운 클라이언트 측 URL 전송 라이브러리인 ‘libcurl’로 구동됩니다.

curl 사용의 장점은 무엇인가요?

이 명령어의 다용도성 덕분에 다음과 같은 다양한 용도로 curl을 사용할 수 있습니다:

  • 사용자 인증
  • HTTP POST 요청
  • SSL 연결
  • 프록시 지원
  • FTP 업로드

curl의 가장 간단한 ‘사용 사례’는 지원되는 프로토콜 중 하나를 사용하여 전체 웹사이트를 다운로드하고 업로드하는 것입니다.

Curl 프로토콜

curl은 지원 프로토콜 목록이 길지만, 특정 프로토콜을 지정하지 않으면 기본적으로 HTTP를 사용합니다. 지원되는 프로토콜 목록은 다음과 같습니다:

DICT FILE FTP
FTPS GOPHER HTTP
HTTPS IMAP IMAPS
LDAP POP3 RTMP
RTSP SCP SFTP
SMB SMBS TELNET
TFTP

curl 설치

curl 명령어는 Linux 배포판에 기본적으로 설치되어 있습니다.

curl이 이미 설치되어 있는지 확인하는 방법은 무엇입니까?

1. Linux 콘솔을 엽니다.

2. ‘curl’을 입력하고 ‘Enter’ 키를 누릅니다.

3. curl이 이미 설치되어 있다면 다음과 같은 메시지가 표시됩니다:

curl: 자세한 내용은 'curl --help'를 시도하세요

4. curl이 설치되어 있지 않은 경우, 다음과 같은 메시지가 표시됩니다: ‘command not found’. 이 경우 배포판 패키지를 확인하여 설치할 수 있습니다(자세한 내용은 아래 참조).

cURL 사용 방법

Curl의 구문은 매우 간단합니다:

curl [옵션] [URL]

예를 들어, webpage.com 웹페이지를 다운로드하려면 다음을 실행하세요:

curl www.webpage.com

그러면 터미널 창에 해당 페이지의 소스 코드가 출력됩니다. 프로토콜을 지정하지 않으면 curl은 기본적으로 HTTP를 사용합니다. 특정 프로토콜을 정의하는 방법은 아래 예시를 참고하세요:

curl ftp://webpage.com

://를 추가하는 것을 잊어버리면 curl이 사용하려는 프로토콜을 추측합니다.

명령어의 기본 사용법에 대해 간략히 설명했지만, curl 문서 사이트에서 옵션 목록을 확인할 수 있습니다. 옵션은 URL에 대해 수행할 수 있는 가능한 작업들입니다. 옵션을 선택하면 curl이 지정한 URL에 대해 어떤 작업을 수행할지 알려줍니다. URL은 curl이 이 작업을 수행해야 할 위치를 알려줍니다. 그런 다음 curl은 하나 또는 여러 개의 URL을 나열할 수 있게 합니다.

여러 URL을 다운로드하려면 각 URL 앞에 -0을 붙이고 공백을 두세요. 한 줄에 모두 작성하거나 각 URL마다 별도 줄을 작성할 수 있습니다. 페이지 목록을 지정하여 URL의 일부만 다운로드할 수도 있습니다. 예시:

 curl.exe -O http://example.com/page{1,4,6}.html

다운로드 내용 저장

curl을 사용하여 URL의 내용을 파일로 저장하는 두 가지 방법이 있습니다:

1. -o 방법: URL을 저장할 파일명을 추가할 수 있습니다. 이 옵션의 구조는 다음과 같습니다:

curl -0 filename.html http://example.com/file.html

2. -O 방법: 이 옵션은 URL 이름 그대로 파일을 저장하므로 파일명을 추가할 필요가 없습니다. 사용하려면 URL 앞에 -O를 붙이기만 하면 됩니다.

다운로드 재개

다운로드가 중간에 중단될 수 있습니다. 이 경우 명령어 앞에 -C 옵션을 추가하여 재실행하세요:

curl -C - -O http://website.com/file.html

왜 curl이 그렇게 인기가 있을까요?

Curl은 복잡한 작업을 위해 만들어진 진정한 ‘만능 도구’ 같은 명령어입니다. 하지만 ‘wget’이나 ‘Kurly’처럼 더 간단한 작업에 적합한 대안도 있습니다.

Curl은 거의 모든 플랫폼에서 사용할 수 있어 개발자들 사이에서 선호됩니다. 때로는 기본적으로 설치되어 있기도 합니다. 즉, 어떤 프로그램이나 작업을 실행 중이든 curl 명령어는 작동할 것입니다.

또한, 사용 중인 OS가 10년 미만이라면 curl이 설치되어 있을 가능성이 높습니다. 브라우저에서 문서를 읽고 curl 설명서를 확인할 수도 있습니다. 최신 버전의 Windows를 사용 중이라면 이미 curl이 설치되어 있을 것입니다. 설치되어 있지 않다면, Stack Overflow의 이 게시물을 참고하여 설치 방법을 알아보세요.

프록시와 함께 cURL 사용하기

일부 사용자는 프록시와 함께 cURL을 사용하는 것을 선호할 수 있습니다. 이 경우의 장점은 다음과 같습니다:

  1. 다양한 지리적 위치에서 데이터 요청을 성공적으로 처리하는 능력 향상
  2. 동시에 실행 가능한 데이터 작업 수를 기하급수적으로 증가시킵니다.

이를 위해 cURL에 내장된 ‘-x’ 및 ‘(- – proxy)’ 기능을 활용할 수 있습니다. 사용 중인 프록시를 cURL과 통합하기 위해 사용할 수 있는 명령줄 예시는 다음과 같습니다:

$ curl -x 026.930.77.2:6666 http://linux.com/

위 코드 스니펫에서 ‘6666’은 포트 번호를 나타내는 자리 표시자이며, ‘026.930.77.2’는 IP 주소입니다.

참고: cURL은 HTTP, HTTPS, SOCKS를 포함하여 현재 사용 중인 대부분의 일반적인 프록시 유형과 호환됩니다.

User-Agent 변경 방법

User-Agent는 대상 사이트가 정보 요청 장치를 식별할 수 있게 하는 특성입니다. 대상 사이트는 원하는 데이터를 반환하기 전에 요청자가 특정 기준을 충족하도록 요구할 수 있습니다. 이는 장치 유형, 운영 체제 또는 사용 중인 브라우저와 관련될 수 있습니다. 이러한 시나리오에서 데이터를 수집하는 주체는 대상 사이트가 이상적으로 원하는 ‘후보’를 모방하고자 할 것입니다.

예를 들어, 대상 사이트가 요청자가 Chrome 브라우저를 사용하는 것을 ‘선호’한다고 가정해 보겠습니다. cURL을 사용하여 원하는 데이터 세트를 얻으려면 다음과 같이 이 ‘브라우저 특성’을 모방해야 합니다:

curl -A "Goggle/9.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Chrome/103.0.5060.71" https://getfedora.org/

cURL을 이용한 웹 스크래핑

프로 팁: 웹사이트의 규칙을반드시 준수하고, 일반적으로 비밀번호로 보호된 콘텐츠에 접근하지 마십시오. 이는 대부분 불법이거나 최소한 바람직하지 않습니다.

웹 스크래핑 시 반복적인 작업을 자동화하려면 curl을 사용해 지루한 작업을 피할 수 있습니다. 이를 위해서는 PHP가 필요합니다. GitHub에서 찾은 예시는 다음과 같습니다:


<?php

/**
 * @param string $url - 가져올 URL.
 * @return string - 원시 HTML 응답.
 */
function web_scrape($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

/**
 * @param string $url - 가져올 URL.
 * @return array - 반환된 HTTP 헤더.
 */
function fetch_headers($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

// 사용 예시:
// var_dump(get_headers("https://www.example.com"));
// echo web_scrape('https://www.example.com/');

?>

curl을 사용하여 웹 페이지를 스크래핑할 때 사용해야 할 세 가지 옵션은 다음과 같습니다:

  • 세션 초기화
curl_init($url)
  • 세션 실행
curl_exec()
  • 세션 종료
curl_close()

사용해야 할 다른 옵션은 다음과 같습니다:

  • 스크래핑할 URL 설정
CURLOPT_URL
  • 스크랩된 페이지를 변수로 저장하도록 curl에 지시합니다. (이를 통해 페이지에서 추출하고자 하는 정확한 내용을 얻을 수 있습니다.)
CURLOPT_RETURNTRANSFER

결론

cURL은 강력한 웹 스크래핑 도구이지만, 데이터 수집과 정리 모두에 소중한 개발자 시간을 투자해야 합니다. 바로 여기에 Bright Data가 필요합니다. 선도적인 웹 데이터 플랫폼인 Bright Data는 웹 스크래핑 요구를 지원하기 위한 다양한 제품을 보유하고 있습니다. Bright Data 제품에는 개발자를 고려하여 구축된 웹 스크레이퍼 API, 웹사이트 차단 해제 자동화 기능이 내장된 자동화 브라우저, 스크레이핑보다 정확한 데이터를 선호하는 사용자를 위한 데이터셋 마켓플레이스, 그리고 400M+ monthly개의 안정적인 프록시가 포함됩니다.