본문 바로가기
스터디일지/PYTHON

[3 주차] Python, mongoDB, 크롤링

by 똥쟁이핑크 2023. 7. 6.

Python

  • 인터프리터 방식으로 대화형 컴퓨터 언어이다.
  • 간결하고 읽기 쉬운 직관적인 언어
  • 들여쓰기를 통해 블럭을 나눈다.
  • 데이터 분석, 웹 개발, 인공지능 등 다양한 분야에서 많이 활용된다.
  • 크롤링 공부를 위하여 파이썬을 설치 했다.

 

mongoDB

  • 자유로운 형태로 데이터의 저장이 가능하다
  • 딕셔너리 형태로 저장이 된다.
  • 데이터의 일관성이 부족할 수 있다.
  • Cloud 형태로 제공이 된다.
  • 사용하기 위하여 dnspython, pymongo 2가지의 패키지를 설치한다.
// mongoDB 연결 코드
from pymongo import MongoClient
client = MongoClient('연결할 mongoDB url을 기입')
db = client.dbsparta

 

  • mongoDB를 연결하고 데이터를 다루기 위한 코드는 다음과 같다.
  • users는 카테고리 이름에 따라 변경해서 사용가능하다.
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

  • 데이터를 삽입하면 위와 같은 화면이 된다.

 

 

크롤링

  • 크롤링은 URL을 탐색해서 반복적으로 링크를 찾고 가져오는 과정이다.
  • 웹 페이지를 찾아다니며 정보를 수집한다.
  • 파이썬으로 웹크롤링을 하기 위해 이브러리를 설치해야한다.
  • 데이터 추출, 웹 서버의 요청과 응답을 처리하는 라이브러리를 설치 한다.
  • Beautifulsoup → pip install bs4, requests → pip install requests 를 설치한다.

 

크롤링하기

  • 크롤링하고자 하는 사이트로 간다.
  • 마우스 오른쪽 클릭 후 검사를 누르거나, Ctrl + Shift + i를 눌러 개발자 도구에 들어간다

  • 들어간 다음 Ctrl + Shift + c를 누른다.

  • 위와 같이 선택할 수 있고 관련된 태크들을 확인할 수 있다.
  • 가져올 태그를 확인하고 Copy를 한다

 

  • 태그를 Copy하기 위해 오른쪽 마우스 클릭 → Copy → Copy seletor 를 클릭하면 다음과 같이 복사된다.
title = soup.select_one("#mainContent > div > div.box_ranking > ol > li:nth-child(1) > div > div.thumb_cont > strong > a"
print(title)
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

 

 

 

 

크롤링을 사용하여 과제 하기

import requests // 웹페이지에 요청하기
from bs4 import BeautifulSoup // 데이터 수집하기

URL = "수집할 URL적기"
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(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')

trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr') // 정보를 수집할 태그 선택하기

for a in trs :
    rank = a.select_one('.number').text[0:2].strip()
    title = a.select_one('td.info > a.title.ellipsis').text.strip()
    singer = a.select_one('td.info > a.artist.ellipsis').text
    result = [rank, title, singer] // 수집한 데이터들을 정리해서 저장하기

    print(result) // 출력하기
    
    // mongoDB에 데이터를 삽입할때는 다음과 같은 코드를 삽입한다.
    // db.movies(변경가능).insert_one(result)

 

결과물

 

'스터디일지 > PYTHON' 카테고리의 다른 글

[4 주차] Flask와 미니 프로젝트  (0) 2023.07.13