
웹개발 3주차
페이지크롤링과 mongoDB를 제어
파이썬 패키지 Requests 크롤링 패키지 bs4(beautifulsoup4) mongoDB 패키지 Pymongo,Dnspython,Certifi
크롤링 기본세팅
import requests from bs4 import BeautifulSoup
//타겟 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?sel=pnt&date=20210829',headers=headers)
//HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦 //soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨 //이제 코딩을 통해 필요한 부분을 추출하면 된다.
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: # a의 text를 찍어본다. print (a_tag.text)
beautifulsoup 내 select에 미리 정의된 다른 방법
//선택자를 사용하는 방법 (copy selector) soup.select('태그명') soup.select('.클래스명') soup.select('#아이디명')
soup.select('상위태그명 > 하위태그명 > 하위태그명') soup.select('상위태그명.클래스명 > 하위태그명.클래스명')
//태그와 속성값으로 찾는 방법 soup.select('태그명[속성="값"]')
//한 개만 가져오고 싶은 경우 soup.select_one('위와 동일')
pymongo를 이용한 mongoDB 사용
from pymongo import MongoClient import certifi
ca = certifi.where()
client = MongoClient('mongodb+srv://test:sparta@cluster0.20e3m.mongodb.net/?retryWrites=true&w=majority', tlsCAFile=ca) db = client.dbsparta
//저장 - 예시 doc = {'name':'bobby','age':21} db.users.insert_one(doc)
//한 개 찾기 - 예시 user = db.users.find_one({'name':'bobby'})
//여러개 찾기 - 예시 ( _id 값은 제외하고 출력) all_users = list(db.users.find({},{'_id':False}))
//바꾸기 - 예시 db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
//지우기 - 예시 db.users.delete_one({'name':'bobby'})