다른 말로 크롤링이라고도 한다. 이게 무엇일까? 웹사이트 내에서 데이터를 추출하는 방법이라고 생각하면 된다. 말보다는 행동으로, 바로 한 번 크롤링을 해보자.
내가 만든 웹사이트는 벅스를 크롤링하였는데 이것을 리뷰하면서 크롤링에 대해 알아보겠다. 먼저 완성된 모습을 보자.
나는 파이썬을 이용하여 크롤링 할 것이고 이를 위해선 필요한 패키지가 있다. 이를 설치하도록 하자.
bs4, requests 설치한다.
설치를 완료했다면 기본적인 크롤링의 구조를 보자.
import requests
from bs4 import BeautifulSoup
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('크롤링할 주소')
soup = BeautifulSoup(data.text, 'html.parser')
벅스를 크롤링하였으니 벅스의 순위를 알 수 있는 사이트를 위 코드에 넣자.
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.whmxq.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.bugDB
# 벅스 사이트 크롤링
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://music.bugs.co.kr/chart', headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
완성된 모습에서 순위, 노래, 가수를 스크래핑한 것을 볼 수 있다. 각자 우측 마우스로 검사하여 태그를 봐보자.
#CHARTrealtime > table > tbody > tr:nth-child(1) > td:nth-child(4) > div
순위
#CHARTrealtime > table > tbody > tr:nth-child(1) > th > p
노래
#CHARTrealtime > table > tbody > tr:nth-child(1) > td:nth-child(8) > p > a
가수
나는 songs라는 변수에 #CHARTrealtime > table > tbody > tr 부분까지 가져와보겠다. 그리고 이 부분에서 순위, 노래, 가수를 가져오고 출력해보자.
songs = soup.select('#CHARTrealtime > table > tbody > tr')
for song in songs:
bugs_rank = song.select_one('td > div > strong').text
bugs_title = song.select_one('th > p > a').text
bugs_artist = song.select_one('td > p > a').text
이렇게 웹에서 받은 정보를 나에게서 출력해보았다.
mongoDB를 이용해서 위에 출력했던 데이터를 한 번 저장해보자. 그러기 위해서는 기본적인 패키지가 필요하다.
pymongo, dnspython을 설치한다.
기본적으로 mongoDB를 사용하기 위한 코드는 이것이다.
from pymongo import MongoClient
client = MongoClient('url')
db = client.bugDB
url은 mongoDB를 설치하면서 받은 주소를 의미하고 아래 db는 bugDB라는 곳에 저장한다는 의미라고 생각하면 된다.
위에서 받은 데이터의 코드를 다시 보자.
for song in songs:
bugs_rank = song.select_one('td > div > strong').text
bugs_title = song.select_one('th > p > a').text
bugs_artist = song.select_one('td > p > a').text
이 코드를 이제 DB에 집어넣자. bugs_rank는 rank 이런 식으로 저장할 것이다.
doc = {
'rank': bugs_rank,
'title': bugs_title,
'artist': bugs_artist
}
db.bugs_site.insert_one(doc)
참고로 믿에 있는 명령어는 데이터를 삽입하겠다는 것인데 기본적인 조작어에 대해서는 따로 일지를 올렸다.
이제 mongoDB에 refresh를 통해 새로고침을 하고 확인해보자.
데이터가 들어왔음을 확인할 수 있다.