1부에서 웹크롤링이 왜필요한지 그리고 각언어에서 웹크롤링할때 필요한 라이브러리에 대해서 알아보았습니다.
오늘은 파이썬 언어 웹크롤링을 하기위한 아나콘다 가상환경 설정 및 beautifulsoup4, requests, selenium 설치 등에 대해서 진행해보겠습니다.
Python 웹크롤링 개발을 위한
아나콘다 가상환경 만들기
Local Python설치해도 되지만
그렇게되면 내로컬도 지저분해지고 다양한 파이썬 버전이나 라이브러리 들에 환경구축에도 영향도가 있기때문에
가상환경을 구성해서 서비스에 필요한 라이브러리 버전만 설치 해보도록 하겠습니다.
1. Anaconda 콘다 Python 가상환경 생성 & 목록 확인
아래 링크 참고하세요
각 OS 에 맞는 아나콘다 설치하셨다면 잘설치되었는지 확인해보도록 하겠습니다.
저는 Mac User 이기때문에 Mac환경기반으로 설명하도록 하겠습니다.
다른 OS 사용자분들은 참고해서 각 명령어나 설정에 맞게 찾아서 적용하시면됩니다.
local에 설치된 python 버전확인
(base) lswteen@lswteenui-iMac anaconda3 % python --version
Python 3.9.7
Conda 기반 가상환경 생성
(base) lswteen@lswteenui-iMac anaconda3 % conda create -n web-env-001 python=3.9.7
아래처럼 설치되는것을 확인할수 있습니다.
Collecting package metadata (current_repodata.json): done
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.10.3
latest version: 22.9.0
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /Users/lswteen/opt/anaconda3/envs/web-env-001
added / updated specs:
- python=3.9.7
The following packages will be downloaded:
package | build
---------------------------|-----------------
ca-certificates-2022.07.19 | hecd8cb5_0 124 KB
certifi-2022.9.24 | py39hecd8cb5_0 155 KB
libcxx-14.0.6 | h9765a3e_0 968 KB
ncurses-6.3 | hca72f7f_3 857 KB
openssl-1.1.1q | hca72f7f_0 2.2 MB
pip-22.2.2 | py39hecd8cb5_0 2.3 MB
setuptools-63.4.1 | py39hecd8cb5_0 1.1 MB
sqlite-3.39.3 | h707629a_0 1.2 MB
tk-8.6.12 | h5d9f67b_0 3.1 MB
tzdata-2022c | h04d1e81_0 107 KB
xz-5.2.6 | hca72f7f_0 243 KB
zlib-1.2.12 | h4dc903c_3 95 KB
------------------------------------------------------------
Total: 12.3 MB
The following NEW packages will be INSTALLED:
ca-certificates pkgs/main/osx-64::ca-certificates-2022.07.19-hecd8cb5_0
certifi pkgs/main/osx-64::certifi-2022.9.24-py39hecd8cb5_0
libcxx pkgs/main/osx-64::libcxx-14.0.6-h9765a3e_0
libffi pkgs/main/osx-64::libffi-3.3-hb1e8313_2
ncurses pkgs/main/osx-64::ncurses-6.3-hca72f7f_3
openssl pkgs/main/osx-64::openssl-1.1.1q-hca72f7f_0
pip pkgs/main/osx-64::pip-22.2.2-py39hecd8cb5_0
python pkgs/main/osx-64::python-3.9.7-h88f2d9e_1
readline pkgs/main/osx-64::readline-8.1.2-hca72f7f_1
setuptools pkgs/main/osx-64::setuptools-63.4.1-py39hecd8cb5_0
sqlite pkgs/main/osx-64::sqlite-3.39.3-h707629a_0
tk pkgs/main/osx-64::tk-8.6.12-h5d9f67b_0
tzdata pkgs/main/noarch::tzdata-2022c-h04d1e81_0
wheel pkgs/main/noarch::wheel-0.37.1-pyhd3eb1b0_0
xz pkgs/main/osx-64::xz-5.2.6-hca72f7f_0
zlib pkgs/main/osx-64::zlib-1.2.12-h4dc903c_3
Proceed ([y]/n)? y
Downloading and Extracting Packages
sqlite-3.39.3 | 1.2 MB | ###################################################################################################################### | 100%
zlib-1.2.12 | 95 KB | ###################################################################################################################### | 100%
tzdata-2022c | 107 KB | ###################################################################################################################### | 100%
xz-5.2.6 | 243 KB | ###################################################################################################################### | 100%
openssl-1.1.1q | 2.2 MB | ###################################################################################################################### | 100%
tk-8.6.12 | 3.1 MB | ###################################################################################################################### | 100%
setuptools-63.4.1 | 1.1 MB | ###################################################################################################################### | 100%
pip-22.2.2 | 2.3 MB | ###################################################################################################################### | 100%
libcxx-14.0.6 | 968 KB | ###################################################################################################################### | 100%
certifi-2022.9.24 | 155 KB | ###################################################################################################################### | 100%
ncurses-6.3 | 857 KB | ###################################################################################################################### | 100%
ca-certificates-2022 | 124 KB | ###################################################################################################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
#
# To activate this environment, use
#
# $ conda activate web-env-001
#
# To deactivate an active environment, use
#
# $ conda deactivate
(base) lswteen@lswteenui-iMac anaconda3 % conda env list
# conda environments:
#
base * /Users/lswteen/opt/anaconda3
jobkorea /Users/lswteen/opt/anaconda3/envs/jobkorea
seat /Users/lswteen/opt/anaconda3/envs/seat
web-env-001 /Users/lswteen/opt/anaconda3/envs/web-env-001
보통 conda 설치시 Yes 긍정적으로 하면 /Users/계정명/opt/anaconda3 에 설치됩니다.
conda 가상환경 목록 확인
(base) lswteen@lswteenui-iMac anaconda3 % conda env list
# conda environments:
#
base * /Users/lswteen/opt/anaconda3
jobkorea /Users/lswteen/opt/anaconda3/envs/jobkorea
seat /Users/lswteen/opt/anaconda3/envs/seat
web-env-001 /Users/lswteen/opt/anaconda3/envs/web-env-001
Conda 가상환경 접속
(base) lswteen@lswteenui-iMac anaconda3 % source activate web-env-001
(web-env-001) lswteen@lswteenui-iMac anaconda3 %
가상환경 접속하기전 Local 사용 명령어
$ conda create -n {가상환경이름} python={버전}
conda에 가상환경을 생성합니다.
$ source activate {가상환경이름}
해당 명령어는 최초생성후 아나콘다 가상환경으로 접속하는 명령어입니다.
아래는 anaconda 가상환경에서 사용되는 conda 명령어 모음 입니다.
$ conda activate {가생환경이름}
가상환경 접속 이후 종료한뒤에 다시 재접속할때 해당명령어 사용
$ conda env list
생성된 conda 가상환경을 목록으로 보여줍니다.
$conda env remove -n {가상환경이름}
conda로 생성한 가상환경을 삭제합니다.
가상환경 접속후 사용 명령어
$ conda install {패키지 이름}
가상환경 접속후 install 은 필요한 패키지 설치가 가능하며 python 에서 pip, pip3 에 해당하는 동일한 기능입니다.
$ conda uninstall {패키지 이름}
가상환경에서 설치한 패키지를 삭제합니다.
$ conda deactivate
접속한 가상환경을 빠져나갈때는 해당명령어 사용하시면됩니다.
cd <디렉토리> : 디렉토리 이동
cls : 화면 클리어
dir : 현재 디렉토리의 폴더/파일 리스트
del <파일/폴더명> : 파일/폴더 삭제
mkdir <폴더명> : 폴더 생성
드라이브명: : 드라이브간 이동은 ex) c: , d: 처럼 드라이브명:으로 사용
ls : 현재 폴더의 파일/폴더 리스트
$ conda env create -f {yml파일}
ex) conda env export > environment.yaml
yaml 파일 생성
(web-env-001) lswteen@lswteenui-iMac anaconda3 % conda env export > environment.yaml
(web-env-001) lswteen@lswteenui-iMac anaconda3 % ls -al
total 56
drwxr-xr-x 29 lswteen staff 928 10 10 17:48 .
drwxr-xr-x 3 lswteen staff 96 1 16 2022 ..
drwxr-xr-x 3 lswteen staff 96 1 16 2022 Anaconda-Navigator.app
-rw-r--r-- 1 lswteen staff 11440 11 10 2021 LICENSE.txt
drwxr-xr-x 465 lswteen staff 14880 1 16 2022 bin
drwxr-xr-x 374 lswteen staff 11968 1 16 2022 conda-meta
drwxr-xr-x 3 lswteen staff 96 1 16 2022 condabin
drwxr-xr-x 3 lswteen staff 96 1 16 2022 doc
-rw-r--r-- 1 lswteen staff 968 10 10 17:48 environment.yaml
drwxrwsr-x 6 lswteen staff 192 10 10 13:02 envs
drwxr-xr-x 5 lswteen staff 160 1 16 2022 etc
drwxr-xr-x 365 lswteen staff 11680 1 16 2022 include
drwxr-xr-x 774 lswteen staff 24768 1 16 2022 lib
drwxr-xr-x 4 lswteen staff 128 1 16 2022 libexec
drwxr-xr-x 3 lswteen staff 96 1 16 2022 licensing
drwxr-xr-x 3 lswteen staff 96 1 16 2022 man
drwxr-xr-x 68 lswteen staff 2176 1 16 2022 mkspecs
drwxr-xr-x 15 lswteen staff 480 1 16 2022 phrasebooks
drwxr-xr-x 1299 lswteen staff 41568 10 10 17:28 pkgs
drwxr-xr-x 26 lswteen staff 832 1 16 2022 plugins
-rw-rw-r-- 2 lswteen staff 11518 7 4 2021 pyodbc.pyi
drwxr-xr-x 3 lswteen staff 96 1 16 2022 python.app
drwxr-xr-x 27 lswteen staff 864 1 16 2022 qml
drwxr-xr-x 7 lswteen staff 224 1 16 2022 resources
drwxr-xr-x 14 lswteen staff 448 1 16 2022 sbin
drwxr-xr-x 20 lswteen staff 640 1 16 2022 share
drwxr-xr-x 3 lswteen staff 96 1 16 2022 shell
drwxr-xr-x 9 lswteen staff 288 1 16 2022 ssl
drwxr-xr-x 290 lswteen staff 9280 1 16 2022 translations
참고링크 :
웹 크롤링 필요한 패키지 설치
BeautifulSoup4 설치
conda install beautifulsoup4 설치
웹 페이지의 정보를 쉽게 스크랩할 수 있도록 기능을 제공하는 라이브러리입니다.
(web-env-001) lswteen@lswteenui-iMac anaconda3 % conda install beautifulsoup4
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.10.3
latest version: 22.9.0
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /Users/lswteen/opt/anaconda3/envs/web-env-001
added / updated specs:
- beautifulsoup4
The following packages will be downloaded:
package | build
---------------------------|-----------------
beautifulsoup4-4.11.1 | py39hecd8cb5_0 189 KB
------------------------------------------------------------
Total: 189 KB
The following NEW packages will be INSTALLED:
beautifulsoup4 pkgs/main/osx-64::beautifulsoup4-4.11.1-py39hecd8cb5_0
soupsieve pkgs/main/noarch::soupsieve-2.3.1-pyhd3eb1b0_0
Proceed ([y]/n)? y
Downloading and Extracting Packages
beautifulsoup4-4.11. | 189 KB | ###################################################################################################################### | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
(web-env-001) lswteen@lswteenui-iMac anaconda3 %
selenium 설치
동적 처리를위한 사용용도 입니다. chrome 드라이브가 필요하며 관련 라이브러리는 정적페이지 크롤링에서는 필요하지 않지만
특정 동작 이후 생성되는 파싱이 필요하다면 사용해야합니다.
(web-env-001) lswteen@lswteenui-iMac anaconda3 % conda install selenium
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.10.3
latest version: 22.9.0
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /Users/lswteen/opt/anaconda3/envs/web-env-001
added / updated specs:
- selenium
The following packages will be downloaded:
package | build
---------------------------|-----------------
cffi-1.15.1 | py39hc55c11b_0 219 KB
cryptography-37.0.1 | py39hf6deb26_0 1.1 MB
pyopenssl-22.0.0 | pyhd3eb1b0_0 50 KB
urllib3-1.26.11 | py39hecd8cb5_0 185 KB
------------------------------------------------------------
Total: 1.5 MB
The following NEW packages will be INSTALLED:
brotlipy pkgs/main/osx-64::brotlipy-0.7.0-py39h9ed2024_1003
cffi pkgs/main/osx-64::cffi-1.15.1-py39hc55c11b_0
cryptography pkgs/main/osx-64::cryptography-37.0.1-py39hf6deb26_0
idna pkgs/main/noarch::idna-3.3-pyhd3eb1b0_0
pycparser pkgs/main/noarch::pycparser-2.21-pyhd3eb1b0_0
pyopenssl pkgs/main/noarch::pyopenssl-22.0.0-pyhd3eb1b0_0
pysocks pkgs/main/osx-64::pysocks-1.7.1-py39hecd8cb5_0
selenium pkgs/main/osx-64::selenium-3.141.0-py39h9ed2024_1000
urllib3 pkgs/main/osx-64::urllib3-1.26.11-py39hecd8cb5_0
Proceed ([y]/n)? y
Downloading and Extracting Packages
cffi-1.15.1 | 219 KB | ######################################################################################## | 100%
pyopenssl-22.0.0 | 50 KB | ######################################################################################## | 100%
urllib3-1.26.11 | 185 KB | ######################################################################################## | 100%
cryptography-37.0.1 | 1.1 MB | ######################################################################################## | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
requests 설치
Requests: HTTP 요청을 보낼 수 있도록 기능을 제공하는 라이브러리 입니다.
(web-env-001) lswteen@lswteenui-iMac anaconda3 % conda install requests
Collecting package metadata (current_repodata.json): done
Solving environment: done
==> WARNING: A newer version of conda exists. <==
current version: 4.10.3
latest version: 22.9.0
Please update conda by running
$ conda update -n base -c defaults conda
## Package Plan ##
environment location: /Users/lswteen/opt/anaconda3/envs/web-env-001
added / updated specs:
- requests
The following packages will be downloaded:
package | build
---------------------------|-----------------
requests-2.28.1 | py39hecd8cb5_0 93 KB
------------------------------------------------------------
Total: 93 KB
The following NEW packages will be INSTALLED:
charset-normalizer pkgs/main/noarch::charset-normalizer-2.0.4-pyhd3eb1b0_0
requests pkgs/main/osx-64::requests-2.28.1-py39hecd8cb5_0
Proceed ([y]/n)? y
Downloading and Extracting Packages
requests-2.28.1 | 93 KB | ######################################################################################## | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
웹 페이지 크롤링
1. 가상환경에 workspace 폴더 생성
$mkdir workspace
2.workspace 에 프로젝트 폴더생성
$mkdir parse-001
3.vim parser.py 파일 생성
가비아 라이브러리 홈페이지 포스트 제목 추출
import requests
from bs4 import BeautifulSoup as bs
page = requests.get("https://library.gabia.com/")
soup = bs(page.text, "html.parser")
elements = soup.select('div.esg-entry-content a > span')
for index, element in enumerate(elements, 1):
print("{} 번째 게시글의 제목: {}".format(index, element.text))
python parser.py 실행시
아래처럼 가비아에 제목 크롤링 진행됨 .
(web-env-001) lswteen@lswteenui-iMac parse-001 % python parser.py
1 번째 게시글의 제목: 전자결재, 문서철 작업에서 벗어나는 방법
2 번째 게시글의 제목: 핵심산업 클라우드 플래그십 프로젝트 핵심정리
3 번째 게시글의 제목: 전자결재, 페이퍼리스 2.0 시대로 향하는 방법
4 번째 게시글의 제목: 기업메신저, 채팅과 쪽지도 기업의 자산?!
5 번째 게시글의 제목: 기업메신저, 업무 스타일에 딱 맞게 설정
6 번째 게시글의 제목: 기업메신저로 조직의 업무 스트레스 줄이는 방법
7 번째 게시글의 제목: 클라우드 도입 시 MSP 선정 기준 3가지
8 번째 게시글의 제목: 클라우드, 손해 안 보고 제대로 쓰려면? ③ - 클라우드 구성 방식
9 번째 게시글의 제목: 전문 비즈니스 컨설팅이 0원? - 클라우드 컨설팅 지원 사업
10 번째 게시글의 제목: 그룹웨어 전자결재로 ESG 경영이 가능하다?!
11 번째 게시글의 제목: 공공 클라우드 필수 관문, CSAP SaaS 보안 인증
12 번째 게시글의 제목: 클라우드, 손해 안 보고 제대로 쓰려면? ② - 고가용성 기능들
13 번째 게시글의 제목: 기업메일 관리로 효율성과 보안성 둘 다 잡기
14 번째 게시글의 제목: MSP란? 클라우드 도입 전 반드시 알아야 할 사실
15 번째 게시글의 제목: 클라우드, 손해 안 보고 제대로 쓰려면? - 고가용성 개념과 중요성
16 번째 게시글의 제목: 기업 메신저가 주는 재택근무 꿀맛, 보안에선 쓴맛?!
17 번째 게시글의 제목: 1억 원의 주인공을 찾는다고? - KDB 스타트업 프로그램
여기까지 가볍게 아나콘다 가상환경 설정 및 명렁어
웹크롤링에 필요한 패키지 설치 후 가비아 크롤링까지 진행하였습니다.
참고링크 : https://library.gabia.com/contents/9239/
다음 진행은 좀더 심화 과정으로 이미지, 타이틀 가져오면서 라인별로 어떻게 접근하는건지
기능단위로 정리해보도록 하겠습니다.
긴글 읽어 주셔서 감사합니다. :)