상세 컨텐츠

본문 제목

Week I learned 3주차

개발일지

by ZINO 2022. 2. 28. 16:44

본문

반응형

개발일지 3주 차
기간: 2/26~2/27일

 

웹 스크랩핑(크롤링) 기초
1. 원하는 부분 오른쪽 클릭 후 검사

검사

2. 원하는 부분 태그에서 오른쪽 클릭

태그

3.Copy에서 Copy selector 복사
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a

4. 영화 순위, 이름, 평점 가져오기
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
이 부분에서
#old_content > table > tbody > tr까지 공통부분이므로
movies = soup.select('#old_content > table > tbody > tr')을 넣어준다.
그 후 각각의 파트마다 알맞은 셀렉터들을 넣어준다.
여기서 rank에 ['alt']를 붙이는 이유는 rank라는 값에서
alt부분이 필요하기 때문이다.

5. 완성 코드

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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cur&date=20220227',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

movies = soup.select('#old_content > table > tbody > tr')

for movie in movies:
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        rank = movie.select_one('td:nth-child(1) > img')['alt']
        title = a_tag.text
        star = movie.select_one('td.point').text
        print(rank,title,star)

 

Pymongo로 DB 조작하기

기본 용어

  • 저장: doc = {'name':'이름', 'age':나이} db.users.insert_one(doc)
  • 한 개 찾기: user = db.users.find_one({'name':'이름'})
  • 여러 개 찾기: ( _id 값은 제외하고 출력) same_ages = list(db.users.find({'age':나이}, {'_id':False}))
  • 바꾸기: db.users.update_one({'name':'이름'}, {'$set':{'age':나이}})
  • 지우기: db.users.delete_one({'name':'이름'})

크롤링한 데이터를 DB에 넣어보기
위에 코드에서 print를 지운 후
doc를 이용해 순위, 타이틀, 평점을 집어넣는다.

완성 코드

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

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://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=cur&date=20220227',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

moviesprac = soup.select('#old_content > table > tbody > tr')

for movie in moviesprac:
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        rank = movie.select_one('td:nth-child(1) > img')['alt']
        title = a_tag.text
        star = movie.select_one('td.point').text
        doc = {
            'rank' : rank,
            'title' : title,
            'star' : star
        }
        db.moviesprac.insert_one(doc)

코드 삽입 후
오른쪽 마우스 클릭해서 Run을 하면
Robo 3T에 데이터가 저장된 것을 확인할 수 있다.

Robo 3T

여기서 3주 차 개발일지를 마치겠습니다.

반응형

'개발일지' 카테고리의 다른 글

Week I learned 5주차  (0) 2022.03.05
Week I learned 4주차  (2) 2022.03.04
Week I learned 2주차  (0) 2022.02.26
Week I learned 1주차  (1) 2022.02.23

관련글 더보기

댓글 영역