반응형
웹크롤링으로 원하는 데이터를 가져오는 것을 저번에 진행했다면 요번엔 가져온 데이터를 Database (Mongo DB) 에 넣도록 하겠습니다.
우선 웹크롤링으로 데이터추출하는 방법은 아래 URL 참고 부탁드립니다.
2022.05.18 - [개발/Python] - 웹 크롤링 기초1
사전에 Mongodb는 27017 Port를 사용하므로 방화벽을 여는 사전 작업이 필요합니다.
환경 : pycharm, MAC OS, Robo 3T, Mongodb
데이터는 Robo3T 툴을 설치하여 MongoDB안에 데이터들이 정상적으로 들어갔는지 확인하였고,
저와 다른 툴을 사용하셔도 상관없습니다.
코드는 아래와 같습니다.
import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient # pymongo를 임포트 하기(패키지 설치 필요)
client = MongoClient('mongodb://계정id:계정패스워드@ip주소:27017') # mongoDB는 27017 포트로 돌아가고 계정정보 꼭 입력 부탁드립니다.
db = client.dbsparta # 'test'라는 이름의 db를 만듭니다.
# 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.naver',headers=headers)
# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')
# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')
# movies (tr들) 의 반복문을 돌리기
for movie in movies:
# movie 안에 a 가 있으면,
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'] # img 태그의 alt 속성값을 가져오기
title = a_tag.text # a 태그 사이의 텍스트를 가져오기
doc = { # db안에 들어갈 데이터의 값을 선언해줍니다.
'rankdb' : rank,
'titledb' : title
}
print(rank, title) # DB insert 전 내가 넣으려는 데이터가 맞는지 확인하는 것이 좋겠네요
db.movietest.insert_one(doc) # movietest 라는 table에 doc 값을 저장합니다.
여기서 주의할 점은 client 부분에 DB 계정 정보 및 IP주소 꼭 변경하셔야합니다.
변경하지 않으면 접속에러 발생합니다.
DB에 데이터를 넣기전에 원하는 데이터인지 print 찍어보는것이 좋겠습니다.
정상적으로 나온 것을 확인 했으니 넣어도 되겠네요.
movietest라는 테이블에 정상적으로 데이터 쌓인것을 확인 할 수 있겠습니다.
반응형
'개발 > Python' 카테고리의 다른 글
파이썬 py 파일 exe 로 변환 방법 (0) | 2024.04.22 |
---|---|
파이썬 PDF 파일 내 텍스트를 파일명으로 변경 (0) | 2024.04.19 |
파이참 라이선스 만료, 학생 무료 갱신 (0) | 2024.03.12 |
Mongodb 기초 - pymongo (0) | 2022.05.24 |
웹 크롤링 기초1 (0) | 2022.05.18 |