-
[패스트캠퍼스] 웹 개발 강의(파이썬으로 하는 크롤링)패스트캠퍼스/웹개발 2023. 4. 20. 11:31
국비지원교육으로 패스트캠퍼스에서 진행하는 웹 개발 강의를 듣고 정리한 내용입니다.
웹사이트 구성원리
주소(www.naver.com)를 입력하면 실제 숫자(IP)로 이루어진 주소로 컨텐츠 요청(네이버 서버)하면 서버에서 내용 확인하고 사용자 브라우저 HTML을 보내고 브라우저가 HTML을 해석해서 화면에 보여주는 형식으로 구성된다.
서버와 통신
Ajax 통신이 왜 필요할까?
- 매번 페이지가 새로고침되면 불편한 상황이 있다.
- 이런 상황에서 Ajax를 통해 페이지는 변경되지 않고 정보가 변경(서버와 통신)된다.
API
데이터를 주는 주소로 제공해주는 인터페이스
테스트해볼 수 있는 API
https://jsonplaceholder.typicode.com/
JSONPlaceholder - Free Fake REST API
{JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. Serving ~2 billion requests each month.
jsonplaceholder.typicode.com
https://jsonplaceholder.typicode.com/posts (게시판 글 테스트용)
Python 설치
백엔드 프로그램 만들기와 크롤링(스크랩핑)하여 데이터베이스에 저장하기를 해봅니다.
먼저 파이썬으로 크롤링 하는 방법을 배웁니다.
파이썬 설치 방법은 두 가지가 있다.
첫 번째는 파이썬 공식 웹사이트에서 설치한다.
Welcome to Python.org
The official home of the Python Programming Language
www.python.org
- 위 이미지 표시된 버튼을 클릭한다.
- windows라면 설치 파일 실행할 때 확인되는 Add Python 3.10 to PATH 를 체크하고 설치한다. 체크하지 않으면 vscode에서 python의 경로를 알 수 없어서 python 명령어를 사용할 수 없다.
두 번째는 아나콘다를 설치한다.
아나콘다로 설치하면 개발 환경도 같이 설치되고, 아나콘다 내에서 가상 환경을 사용할 수 있어서, 이 방식으로 설치했다.
https://www.anaconda.com/download
Free Download | Anaconda
Anaconda is the birthplace of Python data science. We are a movement of data scientists, data-driven enterprises, and open source communities.
www.anaconda.com
vscode에서 파이썬을 사용할 수 있도록 확장 프로그램 설치를 한다.
https://marketplace.visualstudio.com/items?itemName=ms-python.python
Python - Visual Studio Marketplace
Extension for Visual Studio Code - IntelliSense (Pylance), Linting, Debugging (multi-threaded, remote), Jupyter Notebooks, code formatting, refactoring, unit tests, and more.
marketplace.visualstudio.com
파이썬이 잘 설치되었는지 터미널에서 확인해본다.
python
위 명령어를 입력하고, >>> 이렇게 표시되면 파이썬 실행 중이다.
실행 중에서 나가려면 아래 명령어 입력한다.
quit()
웹 스크래핑(Crawling)
크롤링을 하기 위해 웹에 요청하는 방법과 분석하는 방법을 배운다.
- 주의 사항
- 너무 많은 요청을 하지 않고 한 번만 데이터를 가지고 오는 방식으로 한다.
- 이유는 yes24의 서버에 부담이 가고, 공격으로 여겨서 크롤링이 막힐 수 있다.
크롤링 할 웹사이트 분석하기
- 웹사이트에서 크롤링할 내용의 구조를 분석한다.
- 구조는 크롬에서 해당하는 내용에 마우스 오른쪽 클릭하고 Copy > Copy selector 를 통해 확인한다.
- 해당 강의 에서는 YES24의 베스트 책의 제목을 기준으로 한다.
구조 분석을 위한 작업 분석 결과 베스트 책 제목들이 아래와 같은 코드들이 반복되는 걸 확인했다.
#bestList > ol > li.num1 > p:nth-child(3) > a #bestList > ol > li.num2 > p:nth-child(3) > a #bestList > ol > li.num3 > p:nth-child(3) > a
이제 패키지의 도움을 받아 크롤링해본다.
참고사항: 파이썬의 여러 패키지들이 있는 곳이다. (pip로 설치하는 것들)
https://pypi.org/크롤링을 하기 위해 두 가지의 패키지를 설치한다.
- requests 패키지(HTTP 라이브러리, 웹 요청을 만드는 라이브러리)
- beautifulsoup4(웹 페이지에서 정보를 쉽게 긁어낼 수 있게 해주는 라이브러리)
https://pypi.org/project/requests/
requests
Python HTTP for Humans.
pypi.org
https://pypi.org/project/beautifulsoup4/
beautifulsoup4
Screen-scraping library
pypi.org
Windows 설치 방법
pip install beautifulsoup4
pip install requests
Mac 설치 방법
에는 기본적으로 파이썬이 설치되어 있기 때문에, 내가 설치한 python과 구분하기 위해 3을 작성해서 설치해준다.
php3 install beautifulsoup4
pip3 install requests
크롤링하려 print 해보기
import requests from bs4 import BeautifulSoup # bs4는 BeautifulSoup의 4버전 안에서 쓰겠다는 의미 res = requests.get('http://www.yes24.com/24/Category/BestSeller') # print(res.text) 'http://www.yes24.com/24/Category/BestSeller'의 전체 내용을 긁어옴 # BeautifulSoup은 태그 특징을 이용해 찾을 수 있도록 도와주는 라이브러리 soup = BeautifulSoup(res.text, "html.parser") for i in range(40): index = str(i+1) # 파이썬은 같은 타입끼리 더하지 않으면 에러가 나기 때문에 문자열로 바꾸어줌 -> str() # 예외처리 if index == "19": index = "19_line" elif index == "20": index = "20_line" title = soup.select_one("#bestList > ol > li.num"+ index +" > p:nth-child(3) > a") print(title.text) # select_one: 조건에 맞는 태그 하나만 가지고 오겠다는 의미 # select: 조건에 맞는 모든 태그를 가져옴
select_one할 때 클래스명이 아래와 같이 다른 부분이 있어서 예외 처리하였다.
vs code에서 작성된 코드를 실행한다.
그럼 아래와 같이 책 제목 내용이 잘 출력된다.
반응형'패스트캠퍼스 > 웹개발' 카테고리의 다른 글
[패스트캠퍼스] 웹 개발 강의(OpenGraph,파이썬 패키지 관리) (2) 2023.04.28 [패스트캠퍼스] 웹 개발 강의(AWS 배포) (0) 2023.04.23 [패스트캠퍼스] 웹 개발 강의(Flask) (0) 2023.04.22 [패스트캠퍼스] 웹 개발 강의(MongoDB) (0) 2023.04.20