Computer Programming/Python

(웹개발 종합반)스파르타 3주차 강의 정리

JYCoder 2021. 8. 30. 03:49

3주차 강의 내용은 좀 재밌었다. Web Crawler(웹 스크래핑)에 대해 배워보았다. 전에 다른 친구들이 크롤링 하는 것을 알길래 이게 무엇인지 굉장히 궁금했었다. 그래서 구글링을 좀 해보았었는데 완전히 이해하지는 못했었다. 역시 스파르타! 크롤링의 기초를 쉽게 이해할 수 있었다.

 

우선 아래와 같은 기본 포맷이 필요하다.

import requests
from bs4 import BeautifulSoup

#받아온 데이터를 DB에 저장할 때 필요
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

# Target 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://movie.naver.com/movie/sdb/rank/rmovie.nhn?sel=pnt&date=20200303',headers=headers)

#BeautifulSoup 라이브러리로 HTML을 검색할 수 있는 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

이어서 원하는 데이터 부분을 선택하면 된다.

#copy selector를 이용해서 <tr>부분들을 movies에 넣기
movies = soup.select('#old_content > table > tbody > tr')

# movies의 반복문
for movie in movies:
    #원하는 부분 copy selector
    a_tag = movie.select_one('td.title > div > a')
    #만약 원하는 부분을 copy selector 찍어 보았는데, 결과 중에 None이 나올 경우,
    if a_tag is not None:
        rank = tr.select_one('td:nth-child(1) > img')['alt']
        #'.text'를 사용하여 텍스트 값만 추출
        title = a_tag.text
        point = tr.select_one('td.point').text

		#doc format으로 DB에 저장
        doc = {
            'rank' : rank,
            'title' : title,
            'point' : point
        }
        db.movies.insert_one(doc)

웹으로부터 긁어온 데이터를 DB에 저장했으면, DB를 관리하는 방법은 insert / find / update /delete 로 나누어 정리할 수 있다.

 

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

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

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

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

 

외우기 보단 필요할 때 찾아서 응용하여 사용하면 된다.

 

이제 곧 4주차 강의를 시작한다. 벌써 4주차라니, 기대 가득 ㅎㅎㅎ

 

LIST