TIL 3 | 스크래핑

10872 단어 TILpythonTIL

TIL_210521

Python

  • Python 패키지 활용
  • venv는 virtual environment의 약자고 프로젝트별로 패키지를 담는 가상환경을 의미

웹스크랩핑 (크롤링)

  • requests로 불러오고 BeautifulSoup으로 솎아냄
    requests.get('url',headers=headers)
    BeautifulSoup(data.text, 'html.parser')
  • soup 객체에는 select() select_one() 함수가 있음
  • select()는 모든 결과를 리스트에 담고, select_one()은 하나의 요소만 반환
  • copy selector로 selector를 가져와 활용
  • 크롤링은 정답을 찾아가는게 아니라 되게 만드는 것
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://www.genie.co.kr/chart/top200?ditc=D&ymd=20200403&hh=23&rtm=N&pg=1',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

# 가져온 선택자
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1)
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis

genies = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for ff in genies:
    rank = ff.select_one('td.number').text[:2].strip()
    title = ff.select_one('td.info > a.title.ellipsis').text.strip()
    singer = ff.select_one('td.info > a.artist.ellipsis').text
    print(rank, singer, singer)
  • 코드를 작성할 때는 copy selector가 뭔지, 왜 해야하고 어떻게 잘라 쓰는지 몰랐는데 복습하고 찾아보면서 알게됨
  • 코드 하나 하나 실행해보면서 진행하기

DB

  • DB에는 SQL과 NoSQL이 있음
  • SQL : 행/열 활용, 새로운 데이터를 추가하기가 불편, 정형화된 데이터를 사용하는 방식은 최적화가 잘 되어있음 ex) MySQL, MSSQL, Oracle
  • NoSQL : Dictionary 형식, 데이터관리의 유연성 ex) mongoDB

mongoDB

  • mongoDB, robo 3t 사용
  • robo 3t는 mongoDB를 GUI로 손쉽게 관리하는 툴
  • Python에서 mongoDB를 조작하려면 라이브러리 pymongo가 필요
  • 기본코드를 임포트해야함
from pymongo import MongoClient     #pymongo import
client = MongoClient('localhost', 27017)     # 내 컴퓨터에서 사용
db = client.dbsparta     # dbsparta라는 이름으로 접속(저장소명)
  • 주로 insert,find,update,delete를 사용
#insert
doc = {'name':'jane','age':21}
db.users.insert_one(doc)
#db안에 users라는 컬렉션안에 insert

#find
db.users.find({'age':21},{'_id':False})
#조건에 해당하는 데이터를 가져옴

db.users.find_one({'name':'bobby'},{'_id':False})
#여러개 있어도 제일 위에 있는 하나만 가져옴

#update
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
db.users.update_many({'name':'bobby'},{'$set':{'age':19}})
#many는 조건에 해당하는 전부를 update

#delete
db.users.delete_one({'name':'bobby'})
db.users.delete_many({'name':'bobby'})

생각

210531
확실히 처음 배우던 시점에서의 느낌과 다르다. 머리로 들어오는 정보의 양도 다르고 어느부분을 더 공부해야할지 판단이 선다. 하지만 비효율적으로 느껴지는 부분은 어느정도 넘겨야할듯.

좋은 웹페이지 즐겨찾기