내일배움캠프 TIL (2021-09-14)

김우진·2021년 9월 14일
0

내일배움캠프 TIL

목록 보기
2/21

중요한 내용 및 추가로 알게된 사실

Python 에서의 문자열 + 숫자

python에서 다음과 같은 코드를 실행하면 에러가 발생한다.

name = 'woojin'
a = 5

print(name+a)

이는 문자열과 숫자를 같이 써서 발생하는데 이럴때는 형변환을 통해서 해결해준다.

name = 'woojin'
a = 5

print(name+str(a))

----------result---------
woojin5

Java와는 다르게 자동형변환 되지 않고 사용자가 직접 형변환 해야 된다는 것을 기억해야할 것 같다.

가상환경(Virtual Environment)

같은 시스템에서 실행되는 다른 파이썬 응용 프로그램들의 동작에 영향을 주지 않기 위해, 파이썬 배포 패키지들을 설치하거나 업그레이드하는 것을 가능하게 하는 격리된 실행 환경

즉, 내가 실행 하는 것에 필요한 것들을 준비해둔 환경이고, 여기서 실행하는 것들은 같은 시스템에서 실행되는 다른 프로그램에 영향을 안주기 때문에 마음놓고 편리하게 원하는 패키지들을 설치하거나 하며 테스트 해볼 수 있는 임의의 환경인 것 같다.

추가로 이 가상환경은 기본적으로 파이참에서 venv 폴더를 통해 제공하는 것 같다.

pip를 통해 패키지 추가하기

  1. 'ctrl + alt + s'를 눌러 setting창을 연다.

  1. Project:pythonprac의 Python Interpreter을 누른다.

  1. '+' 버튼을 통해 새로운 패키지를 추가할 수 있는 창을 띄운다.

  1. 추가할 패키지를 검색한 뒤 Install Package를 누른다.

웹스크래핑(크롤링) 기초

python을 통해 웹스크래핑을 하기위해선 아래와 같은 패키지들이 필요하다.

  1. requests

    • url을 통해 요청된 정보를 가져오기 위한 패키지
  2. bs4

    • requests를 통해 가져온 정보 중 필요한 정보를 솎아 내기 위한 패키지
    • BeautifulSoup() 을 통해 사용

    위 패키지들을 설치 후 아래와 같은 방법으로 스크래핑을 진행 할 수 있다.
    아래는 select_one() 을 통해 하나의 태그의 제목을 가져온 경우이다.

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.nhn?sel=pnt&date=20200303',headers=headers)

# html 코드로 변환(솎아내기)
soup = BeautifulSoup(data.text, 'html.parser') 

# 코딩 시작
title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a') # copy select를 통해 하나의 태그 선택
1. print(title)    # 원하는 태그 한줄 가져오기
2. print(title.text) # 제목(내용 가져오기)
3. print(title.attrs) # 태그의 속성 가져오기
4. print(title['href']) # 태그의 속성 값 가져오기

-----------결과 값-----------
1. <a href="/movie/bi/mi/basic.naver?code=171539" title="그린 북">그린 북</a>
2. 그린 북
3. {'href': '/movie/bi/mi/basic.naver?code=171539', 'title': '그린 북'}
4. /movie/bi/mi/basic.naver?code=171539

추가로 여러개를 가져오기 위해선 select() 를 이용하면 된다.
내가 원하는 부분이 어디 밑에 있는지 'copy selector'를 통해 찾는다.

# #old_content > table > tbody > tr:nth-child(3)
# #old_content > table > tbody > tr:nth-child(4)
# 이를 통해 내가 가지고 오려는 정보가 #old_content > table > tbody > tr 밑에 있는 것을 알 수 있음
trs = soup.select('#old_content > table > tbody > tr')

for tr in trs:
    a_tag = tr.select_one('td.title > div > a')
    if a_tag is not None:
        title = a_tag.text
        print(title)

-----------결과 값-----------
그린 북
가버나움
베일리 어게인
주전장
포드 V 페라리
아일라
원더
당갈
쇼생크 탈출
터미네이터 2:오리지널
...

0개의 댓글