스파르타클럽-웹종합반 : 3주차, 숙제

Bona의 블로그 입니다.·2022년 2월 27일
0

Python

목록 보기
1/2
post-thumbnail

🔸파이썬 패키지 설치하기

  • 패키지 설치 = 외부 라이브러리 설치
  • 가상환경(virtual environment)이란?
    같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경 라이브러리를 담아두는 폴더

🔸웹스크랩핑(크롤링) 기초

  • 크롤링이란? 웹페이지를 그대로 가져와서 거기서 데이터를 추출해내는 방식
  • requests로 요청하고 beautifulsoup로 솎아낸다.

🔸크롤링 연습하기

  • 네이버 영화 페이지에서 순위, 제목, 평점 뽑기
import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : ''}
data = requests.get('크롤링할 페이지 주소',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')
# 여기까지가 bs4사용하기 위해서 붙일 내용

movies = soup.select('#old_content > table > tbody > tr')

for movie in movies:
    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']
        title = a_tag.text
        star = movie.select_one('td.point').text
        print(rank, title, star)
# 속성을 잘못 지정해서 계속 오류가 났었음 movie에서 select_one했어야 했는데 
# movies로 써서 결과값이 출력이 안됬었음.. 그리고 속성값은 () 밖에 []로 뺐어야
# 했는데 위치를 잘못써서 헤메었음 주의하기!!

🔸데이터베이스

  • SQL vs NoSQL
  • SQL : 엑셀과 비슷하다, 열과 행이 정해져있다. 중간에 열을 추가하기는 어렵다, 정형화 되어있어 일관성이 있어 데이터 분석에 용이하다 ex) MS-SQL, My-SQL, Oracle
  • NoSQL : 딕셔너리로 데이터를 저장, 자유로운 형태로 저장이 가능하다, 일관성이 부족할 수도 있다. ex) MongoDB

🔸Pymong로 DB조작하기

  • Python에 pymong 패키지 설치하기
  • insert, find, update, delete 사용해서 DB 조작해보기
  • insert이용해서 크롤링한 데이터 저장하기

🔸3주차 숙제

  • 지니뮤직 크롤링 하기 : 페이지에서 랭킹, 제목, 가수만 출력하기
import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbsparta

headers = {'User-Agent' : ''}
data = requests.get('크롤링할 페이지 주소',headers=headers)

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

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

for music in musics:
    rank = music.select_one('td.number').text[0:2].strip()
    #[0:2]처음부터 2번째까지 출력하라는 뜻?ㅠ_ㅠ .strip()은 문자열 앞뒤 공백삭제
    title = music.select_one('td.info > a.title.ellipsis').text.strip()
    singer = music.select_one('td.info > a.artist.ellipsis').text.strip()
    print(rank, title, singer)

지니뮤직에서 순위를 추출할 때 텍스트들이 막 흩어져서 필요없는 텍스트까지도 출력되었다. 앞에 순위만 자르고 싶어서 계속 찾다가 결국은 답지 커닝했다.
 text[0:2] 를 쓰면 된다는데 뭐지하고 찾아보니 0~2번째 문자열을 출력하라는 뜻.. 구글에 '문자열 일부 출력' 이라고 검색했어야 했는데 어떤 내용을 검색해야하 할지도 몰랐다는게 가장 큰 문제였다.
다음에는 구글링을 할 때 좀 더 고민을 해보고 여러가지로 해봐야겠다.

profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글