Linux Bash shell script

Shell Script로 웹 크롤링(Web Crawling) 데이터 정리하기

임베디드 친구 2025. 2. 13. 09:16
728x90
반응형

웹 크롤링은 많은 데이터를 자동으로 수집하는 데 유용하지만, 수집한 데이터를 정리하지 않으면 활용하기 어렵습니다. 오늘은 Bash Shell Script를 사용하여 웹 크롤링 데이터를 정리하는 방법을 소개합니다.

1. Bash Shell Script란?

Bash는 Linux에서 기본적으로 사용하는 쉘로, 명령어를 조합하여 스크립트를 작성하면 반복적인 작업을 자동화할 수 있습니다. 웹 크롤링 데이터 정리는 아래 작업을 포함할 수 있습니다:

  • 불필요한 데이터 제거
  • 데이터 필터링
  • 형식 변환 (예: JSON, CSV)
  • 중복 데이터 제거

2. 웹 크롤링 데이터의 예시

아래는 웹에서 크롤링한 데이터 예시입니다 (HTML 형식):

<html>
  <body>
    <div class="article">
      <h1>Title 1</h1>
      <p>Content 1</p>
    </div>
    <div class="article">
      <h1>Title 2</h1>
      <p>Content 2</p>
    </div>
  </body>
</html>

우리는 위 데이터를 정리하여 CSV 형식으로 변환하려고 합니다.

3. 필요한 도구 설치

웹 크롤링 데이터 정리에 필요한 도구는 grep, sed, awk 같은 기본 유틸리티입니다. 추가적으로 데이터를 크롤링하는 데 필요한 도구로 curl이나 wget을 사용할 수 있습니다.

sudo apt-get install curl wget

4. Bash Script 작성

4.1 데이터 크롤링

curl 명령어를 사용해 데이터를 크롤링합니다.

#!/bin/bash

# 크롤링할 URL
URL="https://example.com/articles"

# 데이터를 저장할 파일
OUTPUT_FILE="raw_data.html"

# 웹 데이터 크롤링
curl -s "$URL" -o "$OUTPUT_FILE"

echo "데이터가 $OUTPUT_FILE에 저장되었습니다."

4.2 HTML에서 유용한 데이터 추출

grepsed를 사용하여 제목(h1)과 본문(p) 내용을 추출합니다.

#!/bin/bash

# 입력 파일
INPUT_FILE="raw_data.html"
# 출력 파일
OUTPUT_FILE="cleaned_data.csv"

# CSV 헤더 작성
echo "Title,Content" > "$OUTPUT_FILE"

# HTML에서 제목과 본문 추출하여 CSV 형식으로 저장
grep -oP '(?<=<h1>).*?(?=</h1>)' "$INPUT_FILE" | while read -r TITLE; do
  CONTENT=$(grep -oP '(?<=<p>).*?(?=</p>)' "$INPUT_FILE" | head -n 1)
  echo "$TITLE,$CONTENT" >> "$OUTPUT_FILE"
done

echo "정리된 데이터가 $OUTPUT_FILE에 저장되었습니다."

4.3 중복 데이터 제거

sortuniq 명령어를 사용하여 중복 데이터를 제거합니다.

#!/bin/bash

# 입력 파일
INPUT_FILE="cleaned_data.csv"
# 출력 파일
UNIQUE_FILE="unique_data.csv"

# 중복 제거
sort "$INPUT_FILE" | uniq > "$UNIQUE_FILE"

echo "중복이 제거된 데이터가 $UNIQUE_FILE에 저장되었습니다."

5. 전체 스크립트

아래는 크롤링부터 데이터 정리, 중복 제거까지 포함한 전체 스크립트입니다.

#!/bin/bash

# 1. 웹 크롤링
URL="https://example.com/articles"
RAW_FILE="raw_data.html"
CLEAN_FILE="cleaned_data.csv"
UNIQUE_FILE="unique_data.csv"

curl -s "$URL" -o "$RAW_FILE"
echo "데이터가 $RAW_FILE에 저장되었습니다."

# 2. 데이터 정리
echo "Title,Content" > "$CLEAN_FILE"
grep -oP '(?<=<h1>).*?(?=</h1>)' "$RAW_FILE" | while read -r TITLE; do
  CONTENT=$(grep -oP '(?<=<p>).*?(?=</p>)' "$RAW_FILE" | head -n 1)
  echo "$TITLE,$CONTENT" >> "$CLEAN_FILE"
done
echo "정리된 데이터가 $CLEAN_FILE에 저장되었습니다."

# 3. 중복 제거
sort "$CLEAN_FILE" | uniq > "$UNIQUE_FILE"
echo "중복이 제거된 데이터가 $UNIQUE_FILE에 저장되었습니다."

6. 실행 방법

스크립트를 실행하려면 파일에 실행 권한을 부여해야 합니다.

chmod +x web_crawling_cleaner.sh
./web_crawling_cleaner.sh

스크립트 실행 후, 최종 데이터는 unique_data.csv에 저장됩니다.

7. 마무리

이번 글에서는 Bash Shell Script를 사용해 웹 크롤링 데이터를 정리하는 방법을 살펴보았습니다. 정리된 데이터는 다양한 분석 작업에 활용할 수 있습니다. 추가적으로 데이터 정리에 awk, jq 같은 도구를 결합하면 더욱 강력한 스크립트를 작성할 수 있습니다.

반응형