안녕하세요 미니빅입니다.

서비스를 제공하기 위해서, 데이터를 활용하여 부가적인 프로그램을 만드는 경우가 많은데요

인터넷에서 정보를 하나씩 복사 + 붙어넣기를 하며 사람이 하나하나 모으기엔 너무 시간이 아까운게 현실입니다.

그래서 크롤링 이라는 작업을 진행하여, 데이터를 모으곤 합니다.

오늘은 데이터 크롤링 방법을 진행해볼게요

데이터는 운동 관련 사이트에 들어가서, 

해당 사이트에서 메뉴에 있는 세부 메뉴를 모드 긁어오는 것이 목표입니다.

운동 종류를 긁어오기 위해 그렇게 진행햇습니다.

https://www.bodyx.co.kr 

 

바디엑스

바디엑스

www.bodyx.co.kr

검색을 해서 바로 나온 이 사이트를 확인을 했고,

 

상단에 있는 저 빨간 부분의 텍스트 들을 긁어오려고 합니다.

텍스트로써 긁어온 자료를 만들어진 mongo DB에 넣어서 추가 활용을 하려는 목적이기 때문입니다.

아래 코드를 보시면,

from bs4 import BeautifulSoup
import requests
from pymongo import MongoClient

client = MongoClient('mongodb+srv://t:a@cluster0.oo49iq1.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.exercise_record #데이터베이스 이름을 넣음

# 타겟 URL을 읽어서 HTML를 받아오고,
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(
    'https://www.bodyx.co.kr/', headers=headers)

beautifulsoup 라이브러리를 가져와서 활용했고,

mongo DB의 정보들을 기입합니다.

하단에는 데이터를 가져오고자 하는 주소에 get 방식으로 request를 합니다. 그러면 html 코드를 가져오게 됩니다.

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')


ones = soup.select("#header > nav > ul > li > div > ul > li > a")

이제 html 코드를 text로 변환하고, 거기서 원하는 부분을 찾아 넣어줍니다.

그렇게 넣기 위해선 해당 부분에 대한 정보를 가져와야하는데,

web, html 에 tag에 대한 지식이 있으시다면 이해하기 쉬우실텐데

웹 브라우저(크롬)에서, F12를 누르면 개발자 도구가 활성화 됩니다.

 

거기에서, 저 빨간색 상자에 있는 아이콘을 클릭하면 선택 도구가 활성화 되고,

내가 원하는 곳에 선택을 하면 저렇게 태그에 대한 정보가 나오며,

오른쪽 개발자 도구에 해당 위치가 활성화 됩니다

해당 위치에 마우스 오른쪽 클릭을 하여, copy selector를 실행하면

"#header > nav > ul > li.active > div > ul > li:nth-child(4) > a" 와 같이 태그 정보를 얻을 수 있습니다.

ones = soup.select("#header > nav > ul > li > div > ul > li > a")

# # print(ones)
# print(len(ones))

for one in ones[:-16]:
    one_text = one.text
    if "전체" in one_text:
        print(1)
    else:
        print(one_text)
        doc = {
               'name': one_text,
               'one_text': None
               }
        db.kind.insert_one(doc)

해당 태그를 기반으로 soup의 select 메서드를 이용해서, 해당 태그의 값들을 list로 받아들여

원하는 값들만 db에 등록한 코드입니다.

 

주로 파이썬에서 크롤링 관련 라이브러리는 beautifulsoupselenium으로 나뉩니다.

동적인 동작이 필요할 땐 selenium을 활용하지만, 정적인 페이지에서는 beautifulsoup으로 충분하기에

데이터 수집 단에서 활용하시길 바랍니다.

그럼 이번 내용은 이 정도로 마치도록 하겠습니다.

감사합니다.

+ Recent posts