ํฌ๋กค๋ง
· Web์์ ์กด์ฌํ๋ Contents๋ฅผ ๊ทธ๋๋ก ๊ฐ์ ธ์์ ํ์ํ ๋ฐ์ดํฐ๋ง ์ถ์ถํ๋ ๊ธฐ๋ฒ
# ํฌ๋กค๋ง ๊ธฐ๋ณธ ์ธํ
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('url ์
๋ ฅ',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# BeautifulSoup ์ฌ์ฉ๋ฒ
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=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')
print(title)
๋จผ์ beautifulsoup ๋ด select์ ๋ฏธ๋ฆฌ ์ ์๋ select์ select_one์ ์ฌ์ฉ๋ฒ์ ์ตํ๋ณด์.
# copy selector๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
soup.select('ํ๊ทธ๋ช ')
soup.select('.ํด๋์ค๋ช ')
soup.select('#์์ด๋๋ช ')
soup.select('์์ํ๊ทธ๋ช > ํ์ํ๊ทธ๋ช > ํ์ํ๊ทธ๋ช ')
soup.select('์์ํ๊ทธ๋ช .ํด๋์ค๋ช > ํ์ํ๊ทธ๋ช .ํด๋์ค๋ช ')
# ํ๊ทธ์ ์์ฑ๊ฐ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ
soup.select('ํ๊ทธ๋ช [์์ฑ="๊ฐ"]')
# ํ ๊ฐ๋ง ๊ฐ์ ธ์ค๊ณ ์ถ์ ๊ฒฝ์ฐ
soup.select_one('์์ ๋์ผ')
์ ์ฝ๋๋ฅผ ์คํํ๋ฉด
์ด๋ฐ ๊ฐ์ด ๋์ค๋๋ฐ ์ฌ๊ธฐ์ " " ์ฌ์ด์ ํ์ดํผ๋งํฌ ์์ฑ์ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด
print(title['href'])
์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ถ๊ฐ๋ก
ํ๊ทธ ์์ ํ ์คํธ๋ฅผ ์ฐ๊ณ ์ถ์ ๋ → ํ๊ทธ.text
ํ๊ทธ ์์ ์์ฑ์ ์ฐ๊ณ ์ถ์ ๋ → ํ๊ทธ['์์ฑ'] ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ๋ค์ด๋ฒ ์ํ ํ์ด์ง๋ฅผ ์์, ์ํ๋ช , ํ์ ์์ผ๋ก ํฌ๋กค๋ง ํด๋ณด์.
์ํ ์ ๋ชฉ 1, 2์๋ฅผ '์ํ๋ ๋ถ๋ถ์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญ์ผ๋ก ๊ฒ์ฌ ํ ํ ์ํ๋ ํ๊ทธ์์ Copy selector๋ก ๋ณต์ฌ'ํ๋ฉด ์ฝ๋๋ฅผ ๊ฐ์ ธ์ค๋ฉด ์๋์ ๊ฐ๋ค.
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a //1์
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a //2์
์ฌ๊ธฐ์ #old๋ถํฐ tr๊น์ง๋ ๊ฐ์ผ๋ฏ๋ก select๋ฅผ ์ด์ฉํ์ฌ tr๋ค์ ๋ถ๋ฌ์จ๋ค.
movies = soup.select('#old_content > table > tbody > tr')
๋ค์, ์์์ ์ ๋ชฉ, ํ์ ์ copy selectํ๋ฉด ์๋์ ๊ฐ๋ค.
# old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img //์์
# old_content > table > tbody > tr:nth-child(2) > td.title > div > a //์ ๋ชฉ
# old_content > table > tbody > tr:nth-child(2) > td.point //ํ์
tr๊น์ง๋ ์ด๋ฏธ ๋ถ๋ฌ์์ผ๋ฏ๋ก ๊ฐ๊ฐ ํ์ํ ๊ฐ๋ง selectํ๋ฉด ์ฝ๋๋ ์ด๋ ๊ฒ ๋๋ค
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')
star = movie.select_one('td.point')
ํ์ง๋ง ์ด๋ ๊ฒ๋ง ํ๋ฉด
์ด๋ฐ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋๋ฐ ์ฌ๊ธฐ์ ์์๋ฅผ selectํ๋ ค๋ฉด ์์์ alt๊ฐ์ ๊ฐ์ ธ์์ผ ํ๋ค.
๋ํ ์ ๋ชฉ๊ณผ ํ์ ์ text๋ก ๊ฐ์ ธ์์ผ ํ๋ฏ๋ก .text๋ฅผ ์ฌ์ฉํ์ฌ text๊ฐ์ผ๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ์ต์ข ์ฝ๋๋ ์๋์ ๊ฐ๋ค.
movies = soup.select('#old_content > table > tbody > tr')
for movie in movies:
a = movie.select_one('td.title > div > a')
if a is not None:
title = a.text
rank = movie.select_one('td:nth-child(1) > img')['alt']
star = movie.select_one('td.point').text
print(rank, title, star)
MongoDB
· NoSQL์ ๋ํ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์ฌ๊ธฐ์ ์ ๊น!
- DB(๋ฐ์ดํฐ๋ฒ ์ด์ค)๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?
: ์ ์ ์ฅํ๊ธฐ ์ํด์? X , ๋ฐ์ดํฐ๋ฅผ ์ ๋ฝ์ ์ฌ์ฉํ๊ธฐ ์ํด์ O
# MongoDB import ์ฝ๋
from pymongo import MongoClient
client = MongoClient('mongodb+srv://ekgp209:heaven1004@cluster0.7n9jh.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta
# pymongo ์ฝ๋ ์์ฝ
# ์ ์ฅ - ์์
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'})
์์ ์ํํ ๋ค์ด๋ฒ ์ํ ํ์ด์ง ํฌ๋กค๋ง ํ ๊ฒฐ๊ณผ ๊ฐ์ DB์ ์ ์ฅํด๋ณด์.
์ ์ฅ์ ์ํด print(rank, title, star) ๊ฐ ์๋
doc = {
'title' : title,
'rank' : rank,
'star' : star
}
db.movies.insert_one(doc)
๋ก ์์ ํ์ฌ ์คํํ๋ฉด ์๋์ ๊ฐ์ด DB์ ์ ์ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
pymongo๋ฅผ ์ด์ฉํ ๊ฐ๋จํ ์์ ๋ฅผ ์ฐ์ต ํด๋ณด์.
1. ์ํ์ ๋ชฉ '๊ฐ๋ฒ๋์'์ ํ์ ๊ฐ์ ธ์ค๊ธฐ
movie = db.movies.find_one({'title':'๊ฐ๋ฒ๋์'})
print(movie['star'])
2. '๊ฐ๋ฒ๋์'์ ํ์ ๊ณผ ํ์ ์ด ๊ฐ์ ์ํ์ ๋ชฉ๋ค ๊ฐ์ ธ์ค๊ธฐ
movie = db.movies.find_one({'title':'๊ฐ๋ฒ๋์'})
star = movie['star']
all_movies = list(db.movies.find({'star':star},{'_id':False}))
for m in all_movies:
print(m['title'])
3. '๊ฐ๋ฒ๋์'์ ํ์ ์ 0์ผ๋ก ๋ง๋ค๊ธฐ
db.movies.update_one({'title': '๊ฐ๋ฒ๋์'}, {'$set': {'star': '0'}})
'๐ ๊ธฐํ > ์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ_FE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์น๊ฐ๋ฐ ์ข ํฉ๋ฐ | Flask ์ฌ์ฉํ๊ธฐ (0) | 2021.12.27 |
---|---|
์ง๋๋ฎค์ง ํฌ๋กค๋งํ๊ธฐ (0) | 2021.12.27 |
์น๊ฐ๋ฐ ์ข ํฉ๋ฐ | jQuery | Ajax (0) | 2021.12.23 |
ํฌ๋ช ๋ก ๋ง๋ค๊ธฐ (0) | 2021.12.22 |
์น๊ฐ๋ฐ ์ข ํฉ๋ฐ | ๊ฐ๋ฐ ๊ธฐ์ด | ํ๊ทธ (0) | 2021.12.21 |