CS & Growth

Code today, Lead tomorrow

C. IT Work

#C2. 웹 크롤러 서비스를 확인해보고 직접 만들기로 결심하다.

Urban Techy 2024. 6. 30. 01:18

1. 웹 크롤링을 내가 직접 해보겠다며 덤비기 시작했다.

 

이전에 서울 전역의 쉐어하우스 정보를 전부 다 수집했었다. 그 때가 코로나가 막 시작했을 때였으니 학문적인 가치가 있을 거라고 생각했다. 코로나로 인한 공유경제 주거 부분에서의 비포 애프터 금액 비교랄까? 그 때 내가 알고 있는 쉐어하우스 중개 서비스를 다 개발자에게 알려주고, 개발자가 매일 금액 변동과 공실 변동 사항을 정리해서 알려줬다. 아쉽게도 사업을 마무리하면서 더 이상 해당 프로그램을 사용하지 않게 된 바람에 까마득히 잊어버리고 있었다. 

 

이제는 그 업무를 내가 직접 해보려고 하는 것이다. 과아연..이제 막 파이썬에 입문한 병아리 단계에서 이런 작업에 어느 정도로 접근이 가능할지부터 궁금해지기 시작했다. 자, 그렇다면 웹 크롤링은 대체 무어란 말이냐. 모니터에서 내 눈 앞에 보이는 정보들을 다 긁어온다는 정도는 들어서 아는데 내가 원하는 정보를 내가 원하는 방식으로 가져올 수 있는가? 그 작동 방식은 무엇이며, 방식을 알고 나서는 어떻게 내가 이를 적용할 수 있을 것인가? 일을 해야하는데 의문이 마구마구 생겨났다. 

 

그러면서 웹 크롤링이 무엇인지 검색을 하기 시작했고, 많은 개발자들이 각자 심혈을 기울여 작성한 블로그들을 찾을 수 있었다. 한 편으로는 해당 내용 자체가 상당히 많이 있는 것을 보고 개발자들은 쉽게 알아갈 수 있지만 비개발자는 죽다 깨어나도 모르는 영역들이 얼마나 많았나 하는 생각에 마치 까막눈이 서서히 떠지는 기분마저 들었다.   

 


 

2. 웹 크롤링이란 무엇인가?

 

요새는 구글에서 검색을 하기 전에 생성형 AI 검색부터 먼저한다. 질문은 다음과 같다.


Q. 웹 크롤링의 정의와 웹 크롤러 아키텍처를 설명해줘.
     그리고 네이버 지도에서 업체 정보를 항목별로 전부 수집할 수 있는 방법을 알려줘.

A1. Claude

웹 크롤링의 정의와 웹 크롤러 아키텍처, 그리고 네이버 지도에서 업체 정보를 수집하는 방법에 대해 설명해 드리겠습니다.

1. 웹 크롤링의 정의: 웹 크롤링은 자동화된 프로그램(크롤러 또는 스파이더)을 사용하여 웹 페이지를 체계적으로 탐색하고 정보를 수집하는 과정입니다.

2. 웹 크롤러 아키텍처: 일반적인 웹 크롤러 아키텍처는 다음과 같은 구성요소를 포함합니다:
a) URL 프론티어: 방문할 URL 목록을 관리합니다.
b) 페이지 다운로더: URL에서 웹 페이지를 다운로드합니다.
c) 콘텐츠 파서: 다운로드된 페이지에서 관련 정보를 추출합니다.
d) 데이터 저장소: 추출된 정보를 저장합니다.
e) URL 추출기: 다운로드된 페이지에서 새로운 URL을 찾아 프론티어에 추가합니다.

3. 네이버 지도에서 업체 정보 수집 방법: 네이버 지도에서 업체 정보를 수집하기 위해서는 다음과 같은 단계를 거칠 수 있습니다:
a) Python과 Selenium 라이브러리를 사용하여 자동화된 브라우저 조작을 구현합니다.
b) 네이버 지도 페이지를 열고 원하는 검색어를 입력합니다.
c) 검색 결과 페이지에서 업체 목록을 찾아 각 업체의 상세 정보 페이지로 이동합니다.
d) 상세 정보 페이지에서 원하는 항목(예: 상호명, 주소, 전화번호, 영업시간 등)을 찾아 추출합니다.
e) 추출한 정보를 구조화된 형태(예: CSV, JSON)로 저장합니다.
f) 다음 페이지로 이동하여 위 과정을 반복합니다.

주의: 웹 크롤링 시 해당 웹사이트의 이용약관과 robots.txt 파일을 반드시 확인하여 허용된 범위 내에서 크롤링을 수행해야 합니다. 또한, 서버에 과도한 부하를 주지 않도록 적절한 간격을 두고 요청을 보내는 것이 중요합니다.
이 방법에 대해 더 자세한 설명이나 코드 예시가 필요하시다면 말씀해 주세요.

A2. ChatGPT
### 웹 크롤링의 정의

**웹 크롤링**은 웹 사이트의 웹 페이지를 자동으로 탐색하고 데이터를 수집하는 프로세스입니다. 웹 크롤러(또는 스파이더, 봇)는 웹 페이지의 링크 구조를 따라가면서 여러 페이지를 방문하여 필요한 정보를 추출합니다. 이 데이터는 일반적으로 검색 엔진, 데이터 분석, 시장 조사 등 다양한 용도로 사용됩니다.

### 웹 크롤러 아키텍처

웹 크롤러 아키텍처는 일반적으로 다음과 같은 주요 구성 요소로 이루어집니다:

1. **URL Queue (URL 큐)**: 크롤링할 URL을 저장하는 큐입니다. 새로운 URL은 큐의 뒤에 추가되고, 크롤러는 큐의 앞에서 URL을 꺼내어 웹 페이지를 요청합니다.

2. **Downloader (다운로더)**: URL 큐에서 꺼낸 URL을 이용하여 웹 페이지를 다운로드합니다. 여기서 HTTP 요청을 통해 웹 페이지의 HTML을 가져옵니다.

3. **Parser (파서)**: 다운로드된 웹 페이지의 HTML을 분석하여 필요한 데이터를 추출합니다. 또한, 페이지 내의 다른 URL을 찾아 URL 큐에 추가합니다.

4. **Data Storage (데이터 저장소)**: 파서에서 추출된 데이터를 저장하는 시스템입니다. 데이터베이스, 파일 시스템, 클라우드 스토리지 등 다양한 방식으로 저장할 수 있습니다.

5. **Scheduler (스케줄러)**: 크롤링의 우선순위와 빈도를 관리하는 시스템입니다. 크롤링할 웹 페이지의 순서와 빈도를 제어하여 서버에 과부하를 주지 않도록 합니다.

### 네이버 지도에서 업체 정보 수집 방법

네이버 지도에서 업체 정보를 항목별로 수집하려면 다음과 같은 단계를 거쳐야 합니다. 이 과정은 웹 크롤링 기술을 이용한 방법을 설명하며, 법적 제약과 서비스 약관을 준수해야 합니다.

#### 1. 웹 크롤링 도구 선택

웹 크롤링을 위해 Python의 `BeautifulSoup`, `requests`, `Selenium` 등을 사용할 수 있습니다.

#### 2. 웹 페이지 분석

네이버 지도의 HTML 구조를 분석하여 필요한 정보가 어디에 위치해 있는지 파악합니다. 브라우저의 개발자 도구(F12)를 사용하여 HTML 소스를 확인합니다.

#### 3. 크롤러 작성

Python을 이용한 간단한 웹 크롤러 예제를 아래에 제공합니다.

```python
import requests
from bs4 import BeautifulSoup

# 네이버 지도에서 특정 검색어로 검색 결과 페이지 URL
search_url = "
https://map.naver.com/v5/search/카페?c=14128505.5445850,4516154.9253643,15,0,0,0,dh
"

# 요청 헤더 설정 (네이버 지도는 User-Agent 헤더를 요구할 수 있음)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}

response = requests.get(search_url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')

# 업체 정보 추출 (HTML 구조에 따라 다름)
places = soup.find_all('div', class_='place_info')
for place in places:
    name = place.find('span', class_='name').text
    address = place.find('span', class_='address').text
    phone = place.find('span', class_='phone').text
    print(f"Name: {name}, Address: {address}, Phone: {phone}")
```

위 코드는 기본적인 웹 크롤러의 예제이며, 네이버 지도에서 실제로 작동하려면 HTML 구조를 정확히 파악하고, 필요에 따라 JavaScript 렌더링을 처리하는 `Selenium`을 사용해야 할 수도 있습니다.

#### 4. 데이터 저장

수집한 데이터를 CSV 파일이나 데이터베이스에 저장할 수 있습니다.

```python
import csv

# 수집한 데이터를 CSV 파일로 저장
with open('places.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(["Name", "Address", "Phone"])
    for place in places:
        name = place.find('span', class_='name').text
        address = place.find('span', class_='address').text
        phone = place.find('span', class_='phone').text
        writer.writerow([name, address, phone])
```

### 주의 사항

1. **서비스 약관 준수**: 네이버 지도 등의 웹 사이트는 크롤링에 대해 엄격한 규정을 둘 수 있습니다. 항상 서비스 약관을 확인하고 준수해야 합니다.

2. **법적 문제**: 웹 크롤링은 법적인 문제를 야기할 수 있습니다. 크롤링하려는 사이트의 로봇 배제 표준(robots.txt)을 준수하고, 사이트 운영자의 허락을 받는 것이 중요합니다.

3. **서버 과부하**: 크롤링 빈도와 요청 수를 조절하여 대상 사이트에 과부하를 주지 않도록 합니다.

 

 

해당 대답을 보자마자 일단 얘네들이 뭐라고 하는지 그래도 조금은 알아듣고 있다는 사실이, 그저 "으아악 뭐라는거야"하면서 넘겨버리지 않고 하나씩 내가 읽어보고 있다는 사실이 너무나 놀라웠다. ㅋㅋㅋ 다만 지금 당장에는 이걸 내가 직접 이해하고 만들어 보기 위해 시간과 에너지를 쓸 겨를이 없기에 기존의 서비스 가운데 나에게 적합한 것이 무엇이 있는지 찾아보기로 했다.

 

자료를 수집하면서도 관심은 온통 웹 크롤링과 크롤러를 만들어보고 싶다는 것에 가 있어서 정신줄을 부여잡기 위해서 노력을 많이 했다. 노가다 작업에서 벗어나고 싶다는 간절함과 신기한 챕터가 열릴 때 마다 '이건 뭐지, 그래서 뭐 어떻게 되는데' 하는 궁금증이 일보다 프로그래밍에 집중을 더 쏟게 만들더라. 새롭고 재밌는 거에 현혹되어 있다가 본업의 시급성에 못이겨 겨우 정신을 차린 뒤에는 웹 크롤러를 직접 만드는 작업은 일단 급한 불을 잽싸게 좀 끄고 나서 시작해야겠다고 생각을 좀 고쳐먹었다.   

 

 

 

 


 

 

 

참고) 비개발자가 쉽게 설명하는 웹 크롤링(Crawling)과 웹 스크래핑(Scraping)의 차이점

https://blog.hectodata.co.kr/crawling_vs_scraping/

 

비개발자가 쉽게 설명하는 웹 크롤링(Crawling)과 웹 스크래핑(Scraping)의 차이점

여러 플랫폼들은 ‘웹 크롤링(Web Crawling)’과 ‘웹 스크래핑(Scrapint)’ 기술을 활용하여 인터넷의 수많은 데이터 속에서 고객이 원하는 정보만을 골라 보여줍니다. 비슷한듯 다른 크롤링과 스크

blog.hectodata.co.kr

 

참고) 웹 크롤러란 무엇일까요? 

https://www.akamai.com/ko/glossary/what-is-a-web-crawler

 

웹 크롤러란 무엇일까요? | 크롤러의 작동 방식 | Akamai

이 포괄적인 기사에서는 웹 크롤러에 대해 살펴봅니다. 웹 크롤러의 작동 방식, 중요성, 그리고 웹사이트 성공을 위해 웹 크롤러를 최적화하는 방법에 대해 알아보세요.

www.akamai.com

 

참고) '웹 크롤러' 좀 그만 만들어라

https://velog.io/@mowinckel/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-I

 

🖨 '웹 크롤러' 좀 그만 만들어라

아무튼 그만 만들어라.

velog.io

이 글을 보고는 개발자들이 벨로그를 얼마나 좋아하는지 느껴지더라. 실력이 좀 쌓이면 벨로그에서 개발자 타이틀로 활동해보고 싶네. 아직은 멀었지만 ㅎㅎㅎ

 

참고) 웹 크롤링과 웹 크롤러 봇

https://gobae.tistory.com/108

 

웹 크롤링과 웹 크롤러 봇

웹 크롤링 웹 사이트에 있는 데이터를 추출해서 사용하기 위한 목적으로 홈페이지 내용을 수집하고, 추출하는 것 특정한 규칙에 맞춰서 웹 페이지에 방문해서 내용에 포함된 데이터를 가져오는

gobae.tistory.com

 

참고) [대규모 시스템 설계 기초] 9장. 웹 크롤러 설계

https://velog.io/@kyy00n/%EB%8C%80%EA%B7%9C%EB%AA%A8-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%84%A4%EA%B3%84-%EA%B8%B0%EC%B4%88-9%EC%9E%A5.-%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%9F%AC-%EC%84%A4%EA%B3%84

 

[대규모 시스템 설계 기초] 9장. 웹 크롤러 설계

크롤러는 로봇 또는 스파이더라고도 부른다. 검색 엔진에서 널리 쓰는 기술. 웹에 새로 올라오거나 갱신된 콘텐츠를 찾아내는 것이 주된 목적이다.

velog.io