코딩 초보의 정리글입니다. 0편부터 보세요.
지난 글 말미에 취미 코딩의 원동력은 필요성이라고 했다. 함수 정의 이런 건 넘어간다. 나도 함수를 필요할 때 처음 짜봤다.
지금까지 과정을 기반으로 생각해보자. requests와 Beautifulsoup 모듈을 불러오고, URL을 호출해서 페이지 소스를 BeautifulSoup 객체로 만든다. 내가 스크래핑 하고 싶은 사이트가 50개 정도 있다고 치자. 사이트별로 처리하고 싶은 작업이 제각각이기 때문에 사이트별로 파일을 하나씩 만들 가능성이 높다. 파일마다 저 작업을 반복할 건가? 50번씩 복붙을 하면서?
코드는 반복을 줄이는 게 최선이다. 왜냐면 나중에 수정을 할 때 여러번 반복해서 수정할 일이 줄어들기 때문이다. 당장은 편하니까 막 코딩을 해도, 반복하다보면 어느 순간 노가다로 느껴지면서 흥미를 잃을 수도 있다. 그래서 뭔가 반복하고 있다는 느낌이 들 때는 대안을 찾는 노력을 하는 게 좋다.
함수는 수학시간에 배운 개념대로 정의된 연산을 처리하는 도구다. 앞서 한번 썼던 함수를 다시 써보면(새로운 파일에 작성하자)
def plusone(x):
return x+1
이걸 인터랙티브 윈도에서 실행시키고 plusone(1)
등 괄호 안에 아무 숫자나 넣어서 실행해보자(숫자가 아니면 에러가 날 것이다). x는 우리가 입력하는 것을 받는 인자다. 쉽게 말해 우리가 입력하는 것을 x라는 변수에 할당해서 1을 더해 돌려주는 것이다.
result = plusone(1)
을 해보면, 돌려준 2라는 값을 result에 할당한다. plusone(result)
의 결과를 스스로 생각해보자. 결과를 맞추는 게 중요하기 보다는, 저 함수가 어떻게 작동하는가를 이해하는 게 중요하다.
이해가 된다면, 다음 코드를 보자.
import requests
from bs4 import BeautifulSoup
def getsoup(url):
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
return soup
해당 파일을 실행시키면 아무 일도 일어나지 않는다. 함수는 정의되는 것이지 실행하지 않았기 때문이다. 기존에 했던 BeautifulSoup 객체를 생성하는 작업을 함수로 만들었다. 즉, 파일마다 같은 구문을 반복하는 것이 아니라 이 함수를 호출해 쓰면 된다. 정확하게 감이 잡히지 않아도 일단 진행해보자.
해당 파일을 helpers.py라고 저장했다고 하자. 다른 파일을 하나 만들어서(같은 폴더에서) 다음과 같이 써보자.
from helper import getsoup
url = "https://news.naver.com/"
soup = getsoup(url)
첫줄은 BeautifulSoup을 로드하는 것과 비슷하다. 파일명인 helper에서 getsoup라는 함수를 불러오는 것이다. 파일이 같은 디렉토리에 있을 때 쓸 수 있다. 모듈을 불러오는 방식은 방대한데, 연습 단계에서는 디렉토리 구조가 복잡하지 않으니 이렇게 쓰면 충분하다.
스크립트를 실행시키면? 에러가 날 것이다. User-Agent 쪽을 처리하지 않았기 때문이다. 제대로 쓰려면 함수 안에 기존에 했던 작업들을 추가해 나가야 한다. 저 함수를 만들어 놓으면 매번 스크립트마다 같은 모듈을 불러올 일이 없다는 걸 염두에 두자.
흥미로운 작업이지만, 우리가 앞으로도 이런 함수를 자주 사용하게 될까? 그렇지는 않을 것이다. 스크래핑 하는 양이 많을 수록 requests를 한번씩 호출하는 작업은 부담스럽기 때문이다. 서두에 말했든 필요한 순간이 오면 requests.session()을 익히고, 그것으로도 성에 안 차면 Scrapy을 찾게 될 거다.
여기선 함수라는 게 있다는 것 정도 알고 넘어가자.
'취미코딩 > hobby' 카테고리의 다른 글
파이썬으로 업무 자동화까지 <14> API_1 (0) | 2021.01.24 |
---|---|
파이썬으로 업무 자동화까지 <12> for (0) | 2020.12.20 |
파이썬으로 업무 자동화까지 <11> BeautifulSoup 03 (0) | 2020.12.20 |
파이썬으로 업무 자동화까지 <10> BeautifulSoup 02 (0) | 2020.12.20 |
파이썬으로 업무 자동화까지 <9> BeautifulSoup 01 (0) | 2020.12.20 |
파이썬으로 업무 자동화까지 <8> requests 3 (2) | 2020.12.19 |
파이썬으로 업무 자동화까지 <7> requests 2 (0) | 2020.12.14 |
파이썬으로 업무 자동화까지 <6> requests 1 (0) | 2020.12.14 |