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
'Computer Programming > Python' 카테고리의 다른 글
(웹개발 종합반)Project Challenge (0) | 2021.09.18 |
---|---|
(웹개발 종합반)스파르타 5주차 강의 정리 (0) | 2021.09.04 |
(웹개발 종합반)스파르타 4주차 강의 정리 (0) | 2021.09.04 |