해당 내용은 Datacamp의 Data engineering track을 정리했습니다.
Data Processing in Shell의 chapter 1에 대한 내용입니다.
해당 포스팅에는 아래의 내용을 포함하고 있습니다.
- 웹사이트에서 데이터 받아오는 방법
- curl
- wget
1. Downloading data using curl
curl(client for URLs)은 서버와 데이터를 주고 받는 유닉스 명령 툴입니다. 주로 HTTP 사이트, FTP 서버에서 데이터를 다운로드할 때 주로 활용됩니다.
curl이 설치되어 있었다면, man curl을 쳤을 때, curl의 manual을 확인할 수 있습니다. curl은 아래와 같이 사용할 수 있습니다.
curl [option flags] [URL]
curl은 HTTP, HTTPS, FTP, SFTP 등의 프토토콜을 지원합니다.
# 원본 파일저장 -O
curl -O https://websitename.com/datafilename.txt
# 다른 이름으로 저장 -o
curl -o renameddatafilename.txt https://websitename.com/datafilename.txt
# 비슷한 이름의 여러 파일 저장 -O with Wildcards
curl -O https://websitename.com/datafilename*.txt
# 001.txt ~ 100.txt까지 저장하기(Use Globbing Parser)
curl -O https://websitename.com/datafilename[001-100].txt
# 1-100 사이의 10번째마다 파일 저장
curl -O https://websitename.com/datafilename[001-100:10].txt
위의 설명 외에도 다양한 flag가 존재합니다. -L은 300 에러가 발생했을 때, HTTP URL을 리디렉션합니다. -C는 시간이 초과되었을 때, 이전 파일 전송을 재개합니다.
2. Downloading data using Wget
curl로 데이터를 다운받을 수 있지만, Wget이라는 명령어도 가능합니다. Wget은 모든 운영 체제에서 호환이 가능하다는 특징이 있습니다. FTP와 HTTP로부터 데이터를 다운받을 때 사용하며, curl을 활용하는 것보다 wget을 활용하는 것이 여러 개의 파일을 다운로드할 때 낫습니다. wget은 단일 파일, 전체 폴더, 웹페이지까지 다양하게 다운로드할 수 있습니다. 무엇보다 재귀적으로 여러 파일을 다운로드할 수 있습니다.
wget이 설치되었는지 확인하기 위해서는 man외에도 which를 사용할 수 있습니다.
# 설치 여부 확인
man wget
# 설치 여부 확인(wget 설치 위치 반환)
which wget
> /user/local/bin/wget
Wget은 OS마다 다른 명령어로 설치해야 합니다. Linux 사용자의 경우에는 이미 설치되어 있을 수 있습니다. 만약, 설치가 되지 않은 경우에는 sudo apt-get install wget 명령어로 설치할 수 있습니다. MacOS 사용자의 경우에는 brew install wget으로 설치할 수 있습니다. Windows사용자는 gnu 사이트에 접속하여 패키지를 다운로드해야 합니다. wget은 wget [option flags] [URL] 로 사용할 수 있습니다.
Wget Flag 종류
-b : 다운로드가 백그라운드에서 실행될 수 있습니다.
-q : Wget 출력을 없애기 때문에 디스크 공간을 절약할 수 있습니다.
-c : 다른 프로그램에 의해 다운로드에 실패한 파일을 다운받는데 유용합니다.
-bqc 처럼 묶어서 활용할 수 있습니다.
pid는 프로세스를 취소할 경우를 대비하여 할당된 ID 값입니다.
3. Advanced downloading using Wget
여러 파일을 저장할 때, txt파일 내에 모든 URL을 포함해서 Wget으로 파일을 모두 저장할 수 있습니다.
wget -i url_list.txt
--limit-rate flag를 활용하면 다운로드 대역폭의 최대 상한을 제한할 수 있습니다.
#Syntax
wget --limit-rate={rate}k {file_location}
#Example
wget --limit-rate=200k -i url_list.txt
작은 파일을 다운로드할 때에는 다운로드 대역폭을 적용해도 효과가 없습니다. 파일 호스팅 서버를 과도하게 사용하지 않으려면 --wait을 사용하면 유용합니다. --wait은 파일 다운로드간에 강제로 대기 시간을 적용합니다.
#Syntax
wget --wait={seconds} {file_location}
#Example
wget --wait=2.5 -i url_list.txt
Curl과 Wget을 비교하면, Curl은 Wget에 비해 20개의 다른 프로토콜에서 다운로드 및 업로드가 가능합니다. 또한 Wget에 비해 모든 운영 체제에 설치하기 쉽습니다. 반면, Wget은 여러 파일 다운로드할 때 장점이 있으며, 전체 파일 디렉토리부터 HTML 페이지까지 거의 모든 것을 다운로드할 수 있습니다.