개발일지
Week I learned 3주차
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에 데이터가 저장된 것을 확인할 수 있다.
여기서 3주 차 개발일지를 마치겠습니다.
반응형