ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ
์ฝ”๋”ฉ ์ง ๐Ÿ’ช
ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ
  • ์นดํ…Œ๊ณ ๋ฆฌ (135)
    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• (12)
      • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (5)
      • DB (0)
      • Node.js (4)
      • ํ˜•์ƒ ๊ด€๋ฆฌ (2)
      • Spring (1)
    • ์›น (11)
      • React (5)
      • ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ__์›น (6)
    • ๋ชจ๋ฐ”์ผ (2)
      • ์•ˆ๋“œ๋กœ์ด๋“œ (2)
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (55)
      • C (13)
      • Python (15)
      • SQL (5)
      • Java (22)
    • ์‚ฌ๋ฌผ์ธํ„ฐ๋„ท (11)
      • ์•„๋‘์ด๋…ธ (11)
    • ์ผ์ƒ (31)
      • ๋ง›์ง‘ (13)
      • ๋žญํ‚น๋‹ญ์ปด (4)
      • ํ›„๊ธฐ (11)
      • ์š”๋ฆฌ (3)
      • ์žก๋‹ด (0)
    • ๊ต์–‘ (4)
      • ์‹ฌ๋ฆฌํ•™ (3)
      • ํ…Œ๋‹ˆ์Šค (1)
    • ์ž๊ฒฉ์ฆ (9)
      • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿ’ป github

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ

์ฝ”๋”ฉ ์ง ๐Ÿ’ช

[์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ] ๐Ÿ’ป ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ - 3์ฃผ์ฐจ
์›น/์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ__์›น

[์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ] ๐Ÿ’ป ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ - 3์ฃผ์ฐจ

2022. 6. 17. 10:38

ใ€Š ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ โ€•1์ฃผ์ฐจโ€•  ใ€‹

ใ€Š ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ โ€•2์ฃผ์ฐจโ€• ใ€‹


[ SQL vs NoSQL ]

 ๐Ÿ‘‰ SQL(๊ด€๊ณ„ํ˜• DB / RDBMS)

๋”๋ณด๊ธฐ

- ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋œ ์ •ํ˜•ํ™”๋œ ํ‘œ ํ˜•ํƒœ์˜ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅ

- ๋ฐ์ดํ„ฐ์˜ ์ข…์†์„ฑ์€ ๊ด€๊ณ„๋กœ ํ‘œํ˜„

- ์—ด์€ ๋ฐ์ดํ„ฐ์˜ ์†์„ฑ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ , ํ–‰์€ ์—ด(๋ฐ์ดํ„ฐ ์†์„ฑ)์˜ ํ˜•์‹์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊น€

- ์—ด์˜ ๊ตฌ์กฐ์™€ ๋ฐ์ดํ„ฐ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋กœ ์‚ฌ์ „์— ์ •์˜๋˜์–ด ์‚ฌ์šฉ

- ์Šคํ‚ค๋งˆ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์ง€๋งŒ, ์ •ํ˜•ํ™” ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ๋ถ„๋ฅ˜, ์ •๋ ฌ, ํƒ์ƒ‰ ์†๋„๊ฐ€ ๋น ๋ฆ„

- ๋Œ€ํ‘œ์ ์ธ RDBMS : MySQL, Oracle, MariaDB...

 

 ๐Ÿ‘‰ NoSQL(๋น„๊ด€๊ณ„ํ˜• DB)

๋”๋ณด๊ธฐ

- ๋‹จ์–ด์˜ ๋œป์€ "Not Only SQL"์ด๋ฉฐ, ๊ด€๊ณ„ํ˜• DB๋ฅผ ์ „ํ˜€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ์œ ํ˜•์˜ DB๋ฅผ ์‚ฌ์šฉ

- ๋Œ€๋ถ€๋ถ„์ด ์˜คํ”ˆ์†Œ์Šค ํ˜•ํƒœ์ด๋ฉฐ, ์Šคํ‚ค๋งˆ ์—†์ด ๋™์ž‘ํ•˜๊ณ  ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ •์˜ ๋ณ€๊ฒฝ ์—†์ด ์ž์œ ๋กญ๊ฒŒ ํ•„๋“œ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ

 

๐Ÿ‘‰ Key-Value ๋ชจ๋ธ

      - ํ‚ค(Key)์™€ ๊ฐ’(value)์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ์˜ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ NoSQL

      - ์ˆ˜ํ‰์  ํ™•์žฅ์— ์šฉ์ดํ•˜๋ฉฐ ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ

      - ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ๋Œ€์ƒ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ž์ฃผ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉ

      - ๊ฐ’์€ ์ด๋ฏธ์ง€๋‚˜ ๋น„๋””์˜ค ๋“ฑ ์–ด๋– ํ•œ ํ˜•ํƒœ๋ผ๋„ ๊ฐ€๋Šฅ, ๊ฐ„๋‹จํ•œ API๋ฅผ ์ œ๊ณตํ•˜๊ธฐ์— ์งˆ์˜ ์†๋„๊ฐ€ ๋น ๋ฅธ ํŽธ์ž„

      - ๋Œ€ํ‘œ์ ์ธ DBMS : Memcached, Redis, AWS Dynamo DB, LevelDB...

 

๐Ÿ‘‰ Document ๋ชจ๋ธ

      - Key-Value ๋ชจ๋ธ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค์™€ ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ํ˜•ํƒœ๋กœ ์ €์žฅ

      - Key-Value ๋ชจ๋ธ๊ณผ ๋‹ฌ๋ฆฌ Value๊ฐ€ ๊ณ„์ธต์  ํ˜•ํƒœ์˜ ๋ฌธ์„œ(JSON, XML๊ณผ ๊ฐ™์€ ํ‘œ์ค€ ํ˜•์‹ ์ด์šฉ)๋กœ ์ €์žฅ๋˜๋ฉฐ ์ด๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฐ์ฒด์™€ ์œ ์‚ฌํ•จ

      - Value๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰๋˜์–ด ์ €์žฅ ํ•˜๊ธฐ ์ „์— ๋ณ„๋„๋กœ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ฌธ์„œ ์ถ”๊ฐ€์‹œ ๊ทธ๊ฒƒ์ด ์Šคํ‚ค๋งˆ๊ฐ€ ๋จ

      - ๋Œ€ํ‘œ์ ์ธ DBMS : MongoDB, CouchDB, MarkLogic...

 

๐Ÿ‘‰ Column Family ๋ชจ๋ธ

      - ์œ„์˜ ๋‘ ๋ชจ๋ธ์€ Key-Value ์Œ์—์„œ Value๋ฅผ ํ†ตํ•ด ํ•„๋“œ๋ฅผ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด, Column Family ๋ชจ๋ธ์€ Key๋ฅผ ํ†ตํ•ด ํ•„๋“œ ๊ฒฐ์ •

      - Key๋Š” Row-Key์™€ Column-Family, Column-name์„ ๊ฐ€์ง€๋ฉฐ ์—ฐ๊ด€๋œ ๋ฐ์ดํ„ฐ๋“ค์€ Column-Family์— ์†ํ•ด ์žˆ์œผ๋ฉฐ, ๊ฐ์ž์˜ Column-name์„ ๊ฐ€์ง

      - ์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์˜ ํฐ ํ…Œ์ด๋ธ”๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์งˆ์˜๋Š” Row->Column-Family->Column-Name์„ ํ†ตํ•ด ์ˆ˜ํ–‰

      - ๋Œ€ํ‘œ์ ์ธ DBMS : HBase, Cassandra, Hypertable, GCP BigTable...

 

 

 

๐Ÿ‘‰ Graph ๋ชจ๋ธ

      - ์‹ค์ œ ์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๊ณ„์™€ ํ•จ๊ป˜ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๋ชจ๋ธ

      - ๋ฐ์ดํ„ฐ๋Š” ์—ฐ์†์ ์ธ ๋…ธ๋“œ, ๊ด€๊ณ„, ํŠน์„ฑ์˜ ํ˜•ํƒœ(๊ทธ๋ž˜ํ”„)๋กœ ์ €์žฅ

      - ๊ทธ๋ž˜ํ”„ ๋ชจ๋ธ์—์„œ์˜ ์งˆ์˜๋Š” ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง

 

 

[ MongoDB ]

 - ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ :https://www.mongodb.com/ko-kr

 - NoSQL๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ Document ์ง€ํ–ฅ DBMS

 - MongoDB๋Š” SQL DBMS๋“ค์˜ ํ…Œ์ด๋ธ”๊ณผ ๊ฐ™์€ ์Šคํ‚ค๋งˆ๊ฐ€ ๊ณ ์ •๋œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ 

 - ๋Œ€์‹  JSON ํ˜•ํƒœ์˜ ๋™์  ์Šคํ‚ค๋งˆํ˜• Document๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ด๋ฅผ BSON์ด๋ผ๊ณ  ์ง€์นญ

 - ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ Document(RDBMS์˜ row)๋ผ๊ณ  ํ•˜๊ณ , ์ด๋“ค์˜ ์ง‘ํ•ฉ์„ Collection(RDBMS์˜ Table)์ด๋ผ ํ•จ

 

 

[ Robo3T ]

 - ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ : https://robomongo.org/

 - Robo 3T๋Š” MongoDB ํ˜ธ์ŠคํŒ… ๋ฐฐํฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์ž„(GUI)

 - ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค ๋Œ€์‹  ์‹œ๊ฐ ํ‘œ์‹œ๊ธฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉ ๊ฐ€๋Šฅ

 - ์ฆ‰ MongoDB๋ฅผ ํ†ตํ•ด DB๋ฅผ ์ €์žฅํ•  ๋•Œ ์ด DB ๋‚ด๋ถ€๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ

 

[ Requests ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ]

 - ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ : https://requests.readthedocs.io/en/latest/

 - Requests๋Š” HTTP ์š”์ฒญ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ์•„ํŒŒ์น˜ ๋ผ์ด์„ผ์Šค 2.0 python์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž„

 - ์†์‰ฌ์šด HTTP/1.1 ์š”์ฒญ์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, URL์— ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ์ˆ˜๋™ ์ถ”๊ฐ€ ๋ฐ POST ๋ฐ์ดํ„ฐ ํผ ์ธ์ฝ”๋”ฉ ํ•„์š”x

# ๊ธฐ๋ณธ ์˜ˆ์ œ
import requests

# ์‚ฌ์ดํŠธ์— ์ ‘์† ์‹œ GET ํ—ค๋”๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์„ ํ†ตํ•ด HTTP ํ†ต์‹ ์„ ํ•  ๊ฒฝ์šฐ
# ๋‹ค์ˆ˜์˜ ํ—ค๋” ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ๊ธฐ์— ํ•„์š”์‹œ ํ—ค๋” ์ˆ˜๋™ ์ง€์ • ๊ฐ€๋Šฅ
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'}
response = requests.get('https://www.naver.com/') # ํ•ด๋‹น URL์— GET ๋ฐฉ์‹์˜ HTTP ์š”์ฒญ

print(response.status_code) # status_code == 200์ผ ๊ฒฝ์šฐ ์ •์ƒ์ ์œผ๋กœ ์š”์ฒญ์ด ๋œ ๊ฒƒ
print(response.encoding)    # ์š”์ฒญํ•œ URL์˜ encoding ํ˜•์‹ ํ™•์ธ
print(response.text)        # ์š”์ฒญํ•œ URL์˜ HTML ์†Œ์Šค ์ฝ”๋“œ ์ „๋ถ€๋ฅผ ์ถœ๋ ฅ

 

[ BeautifulSoup ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ]

 - ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ : https://www.crummy.com/software/BeautifulSoup/bs4/doc/

 - HTML ๋ฐ XML ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•œ python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 - ์„ ํ˜ธํ•˜๋Š” parser์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์—ฌ ๊ตฌ๋ฌธ ๋ถ„์„ ํŠธ๋ฆฌ๋ฅผ ํƒ์ƒ‰, ๊ฒ€์ƒ‰ ๋ฐ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€์šฉ์  ๋ฐฉ๋ฒ•์„ ์ œ๊ณต

 - ๋ณดํ†ต request ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ HTTP ์—ฐ๊ฒฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋จ

 - ์ฐธ๊ณ  : 2022.04.22 - [ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/Python] - [Python] ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ํ™œ์šฉ (3)

# ๊ธฐ๋ณธ ์˜ˆ์ œ
from bs4 import BeautifulSoup

# ํ•ด๋‹น html ์†Œ์Šค ์ฝ”๋“œ ๊ฐ์ฒด๋ฅผ html ๋ฌธ๋ฒ•๊ทœ์น™์— ๋”ฐ๋ฅธ ๋ฌธ์ž์—ด์ธ html parser๋กœ ๋ณ€ํ™˜
soup = BeautifulSoup(html_doc, 'html.parser') 

print(soup.prettify()) # html parser๋กœ ๋ณ€ํ™˜๋œ soup๋ฅผ ์‹๋ณ„ํ•˜๊ธฐ ์šฉ์ดํ•œ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ

 

[ pymongo ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ]

 - ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ : https://pymongo.readthedocs.io/en/stable/ 

 - ํŒŒ์ด์ฌ์—์„œ MongoDB์™€ ์—ฐ๋™ํ•˜์—ฌ ์‚ฌ์šฉ์‹œ ํ•„์š”ํ•œ tool๋“ค์„ ์ œ๊ณตํ•˜๋Š” python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๋”๋ณด๊ธฐ

 ๐Ÿ”Ž Making a Connection with MongoClient

from pymongo import MongoClient

# ์ ‘์†ํ•  ํด๋ผ์ด์–ธํŠธ ์ฃผ์†Œ ์ง€์ •
client = MongoClient('localhost', 27017)  # mongoDB๋Š” 27017 ํฌํŠธ๋กœ ๋Œ์•„๊ฐ
# client = MongoClient('mongodb://localhost:27017/')

 

 ๐Ÿ”Ž Getting a Database

# ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์˜ DB์— ์ ‘๊ทผ (ํ•ด๋‹น DB๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ž๋™ ์ƒ์„ฑ๋จ)
db = client.moviesDB    # 'moviesDB' ๋ช…์„ ๊ฐ€์ง„ DB์— ์ ‘๊ทผ / ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ƒ์„ฑ
# db = client['moviesDB']

 

๐Ÿ”Ž Getting a Collection

# DB์˜ Collection์— ์ ‘๊ทผ
collection = db.kor_movies  # moviesDB > kor_movies ์ฝœ๋ ‰์…˜์— ์ ‘๊ทผ
# collection = db['kor_movies']

 

 ๐Ÿ”Ž Documents

# ๋ชฝ๊ณ DB์˜ ๋ฐ์ดํ„ฐ๋Š” JSON ์Šคํƒ€์ผ์˜ ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œ์‹œ(์ €์žฅ)

movie_data = { 'title': '๋ฒ”์ฃ„๋„์‹œ2',
               'genre': '๋ฒ”์ฃ„, ์•ก์…˜',
               'nation': 'ํ•œ๊ตญ',
               'director': '์ด์ƒ์šฉ',
               'release': '2022-05-18',
               'star_score': 9.07 }

 

 ๐Ÿ”Ž Inserting a Document

# ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
collection.insert_one(movie_data)  # ํŠน์ˆ˜ํ‚ค์ธ "_id"ํ‚ค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋จ

 

 ๐Ÿ”Ž Getting a Document

# ๋ฐ์ดํ„ฐ ํƒ์ƒ‰

# find() : ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ถ”์ถœ
# find_one() : ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ํ•œ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœ

# {'_id': False}๋ฅผ ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ _id ๊ฐ’์ธ ObjectId๊นŒ์ง€ ๋ถˆ๋Ÿฌ์˜ด
print(collection.find_one({'title': '๋ฒ”์ฃ„๋„์‹œ2'}, {'_id': False})) # 'title'์ด '๋ฒ”์ฃ„๋„์‹œ2'์ธ ๋ฌธ์„œ ์ถœ๋ ฅ

# ํŠน์ • ์ฝœ๋ ‰์…˜์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ๊ฒฝ์šฐ ๋นˆ ์ค‘๊ด„ํ˜ธ ์ด์šฉ
# print(list(db.users.find({}, {'_id': False})))

 

 ๐Ÿ”Ž Update a Document

# ๋ฐ์ดํ„ฐ ์ˆ˜์ •

# update_many() : ํ•ด๋‹น ์กฐ๊ฑด์„ ๋ถ€ํ•ฉํ•˜๋Š” ๋ฌธ์„œ ๋ชจ๋‘์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ˆ˜ํ–‰
# update_one() : ํ•ด๋‹น ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š” ๋ฌธ์„œ ํ•œ๊ฐœ์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ์ˆ˜ํ–‰

# 'title'์ด '๋ฒ”์ฃ„๋„์‹œ2'์ธ ๋ฌธ์„œ์˜ 'Leading actor' ์˜ value๋ฅผ '๋งˆ๋™์„'์œผ๋กœ ๋ณ€๊ฒฝ / ์—†์„์‹œ ์ƒ์„ฑ ํ›„ ์‚ฝ์ž…
collection.update_one({'title': '๋ฒ”์ฃ„๋„์‹œ2'}, {'$set': {'Leading actor': '๋งˆ๋™์„'}})
collection.update_one({'title': '๋ฒ”์ฃ„๋„์‹œ2'}, {'$set': {'Leading actor': '์†์„๊ตฌ'}})

 

 ๐Ÿ”Ž Delete a Document

# ๋ฐ์ดํ„ฐ ์‚ญ์ œ

# delete_one() : ํ•ด๋‹น ์กฐ๊ฑด์— ๋ถ€ํ•ฉ ํ•˜๋Š” ๋ฌธ์„œ ํ•œ๊ฐœ ์‚ญ์ œ

collection.delete_one({'Leading actor': '์†์„๊ตฌ'})

 

 

[ ์›น์Šคํฌ๋ž˜ํ•‘(ํฌ๋กค๋ง) ์˜ˆ์ œ ]

 

โ‘  2020.03.03 ๊ธฐ์ค€ ๋„ค์ด๋ฒ„ ๋žญํ‚น๋ณ„(ํ‰์ ์ˆœ/๋ชจ๋“  ์˜ํ™”) ์˜ํ™” ์ •๋ณด ์ถœ๋ ฅ

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient

# -- requests settings --
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=20200303',headers=headers)

# -- pymongo settings --
client = MongoClient('localhost', 27017)
db = client.dbsparta

# -- bs4 settings --
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#old_content > table > tbody > tr')

for tr in trs:
    a_tag = tr.select_one('.title > .tit5 > a')
    if a_tag is not None:
        # ac ํด๋ž˜์Šค๊ฐ€ ๋‘๊ฐœ ์กด์žฌํ•จ nth-child ๋ฌธ์„ ํ†ตํ•ด ์‹๋ณ„
        movie_rating = tr.select_one('td:nth-child(1) > img')['alt']
        movie_score = tr.select_one('td.point').text
        movie_title = a_tag.text

        print("[" + movie_rating + "] " + movie_title + " โ˜… : " + movie_score)
        # doc = {'title': movie_title,
        #        'rating': movie_rating,
        #        'score': movie_score}
        # db.movies_02.insert_one(doc)

 

 

โ‘ก 2020.04.03 ๊ธฐ์ค€ ์ง€๋‹ˆ๋ฎค์ง 1-50์œ„ ์ฐจํŠธ ํฌ๋กค๋ง ์˜ˆ์ œ

import requests
from bs4 import BeautifulSoup

# -- requests settings --
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://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)

# -- bs4 settings --
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for tr in trs:
    rating = list(tr.select_one('td.number'))[0].text.strip()
    info = tr.select_one('td.info')
    title = info.select_one('a.title').text.strip()
    artist = info.select_one('a.artist').text
    print(rating + " " + title + " " + artist)

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€
    '์›น/์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ__์›น' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ] ๐Ÿ’ป ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ - 5์ฃผ์ฐจ (1)
    • [์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ] ๐Ÿ’ป ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ - 4์ฃผ์ฐจ
    • [์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ] ๐Ÿ’ป ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ - 2์ฃผ์ฐจ
    • [์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ] ๐Ÿ’ป ์›น๊ฐœ๋ฐœ ์ข…ํ•ฉ - 1์ฃผ์ฐจ
    ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ
    ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ
    ๐Ÿ‘Š ๋ธ”๋กœ๊ทธ๋„ ๊ทผ์„ฑ์ด๋‹ค? ๐Ÿ‘Š

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”