일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- awskrug
- jenkins
- Azure
- 리눅스
- 클라우드
- docker
- open ai
- 프로세스 관리
- python
- AWS
- 3티어 아키텍처
- AI챗봇
- it기사
- git hub
- nexus
- go
- 표준 라이브러리
- maven
- 애저
- terraform
- 사용자 계정 관리
- 함수
- GIT
- 명령어
- AI
- 변수
- dockerfile
- aws사용자모임
- Linux
- Today
- Total
We are Architect
26. 파이썬으로 만드는 웹 스크래핑 본문
* 웹 스크래핑이란?
- 어떤 특정 웹 페이지의 특정 항목에 대한 데이터를 추출하는 기술.
- 예를 들어 어떤 제품의 데이터만을 추출하기 위해서 사용한다.
- 프로그램 제작 시 사용되는 다양한 도구들:
- BeautifulSoup:
- HTML 혹은 XML파일의 데이터를 추출하여서 분석 후에 데이터를 추출.
- 웹 페이지의 구조를 분석하고 특정 태그 <div>, <table> 등의 태그에서 데이터를 가져온다.
- 정적 웹페이지에서 간단한 데이터를 가져오는 데 사용.
- 예를 들어 <h2> 와 같은 제목 태그의 있는 정보를 가져와서 추출.
- Scrapy:
- 웹 스크래핑을 하기 위한 프레임 워크.
- 크롤러 설계, 데이터 파이프 라인, 효율적인 탐색 기능 제공.
- 비동기식으로 데이터를 빠르게 가져오기 가능.
- 예를 들어 이커머스 플랫폼의 모든 제품 정보를 수집.
- Selenium:
- 브라우저 자동화를 통해서 동적 콘텐츠를 스크래핑.
- jscript를 * 렌더링 해야하는 웹 페이지 스크래핑.
- 실제 브라우저를 실행하여 사용자 행동을 재현.
- 크롬, 파이어 폭스 등 다양한 브라우저 지원.
- 로그인 후 접근 가능한 데이터 수집.
*렌더링: 웹 페이지의 코드가 브라우저에 출력되는 것.
- request:
- HTTP 요청을 통해 웹 페이지의 HTML 소스 가져오기.
- 정적 웹 페이지의 콘텐츠를 가져오는 데 사용.
- HTML 코드를 BeautifulSoup이나 다른 라이브러리로 처리하기 위한 기본 도구.
- 간단한 문법으로 GET, POST, PUT 등 다양한 HTTP 요청지원.
- 정적 웹페이지의 HTML 코드를 가져올 때 사용한다.
* GET, PUT, POST
- HTTP의 메서드들이다. 서버와 클라이언트 간의 데이터를 전송하는 방법을 정한다.
- GET: 서버로 부터 데이터를 요청할 때 사용하는 용도. 데이터를 가져오기만 하고 바뀌는 건 없음.
# GET 생긴 모습
https://example.com/books?category=science
- PUT: 서버에 수정해야 할 사항 또는 생성해야 할 요청이 있다면 보내는 용도. 보낼 데이터를 본문 안에 넣는다. 특히 회원 정보 등을 수정할 때 사용하며 보내는 내용을 서버에 덮어 씌운다.
- POST: 서버에 추가해야 할 내용을 보내는 용도로 사용. 본문 안에 숨겨서 보낸다. 회원가입, 댓글 추가 등을 할 때 사용한다. 데이터를 추가해서 서버의 내용을 바꾼다.
- * 멱등성: 코드를 몆번이나 실행해도 똑같은 값이 나오는 경우.
메서드 | 목적 | 데이터의 위치 | *멱등성 | 안전성 | 사용예시 |
GET | 데이터 조회 | URL 쿼리 | O | O | 리소스 가져오기 |
PUT | 데이터 생성 | 본문 | X | X | 사용자 등록하기 |
POST | 데이터 수정 | 본문 | O | X | 사용자 정보변경 |
* 선택한 도구들
- 여러 블로그들을 참고하여 도구는 BeautifulSoup4 와 request이라는 파이썬 모듈들을 채택하였다.
* 개발 전 준비
- BeautifulSoup4와 request를 설치해 준다.
* 찾고자 하는 내용 가져오기
- 지니뮤직에서 실시간 차트의 목록을 가져오고 싶고 우선 해당 페이지를 스크롤하는 코드를 작성한다.
- 2024.11.24 기준 차트 2위에 있는 곡인 APT를 출력해 볼 것이다.
import requests # 필요한 url를 가져오기 위한 모듈.
from bs4 import BeautifulSoup # 데이터 분석후 추출하기 위한 모듈.
# headers, 유저의 http헤더를 달고 브라우저에 접속하는 것 처럼 보이게 하는 딕셔너리 값.
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, 해당 주소의 스크래핑 할 주소를 가져온다. (지니뮤직)
data = requests.get('https://www.genie.co.kr/', headers=headers)
# soup, 가져온 HTML데이터를 Bs객체로 변환한다. 그리고 parser를 사용하여 구조적으로 이해하고 탐색할 수 있게 한다.
# 이후에는 특정 태그나 내용을 추출할 때 사용된다.
soup = BeautifulSoup(data.text, 'html.parser')
# soup변수값 출력
print(soup)
* Selector로 원하는 데이터 값 복사 후 가져온 데이터의 부분만 출력하기
- select_one() 함수를 사용하여 정확한 데이터의 요소값을 출력.
import requests # 필요한 url를 가져오기 위한 모듈.
from bs4 import BeautifulSoup # 데이터 분석후 추출하기 위한 모듈.
# headers, 유저의 http헤더를 달고 브라우저에 접속하는 것 처럼 보이게 하는 딕셔너리 값.
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, 해당 주소의 스크래핑 할 주소를 가져온다. (지니뮤직)
data = requests.get('https://www.genie.co.kr/', headers=headers)
# soup, 가져온 HTML데이터를 Bs객체로 변환한다. 그리고 parser를 사용하여 구조적으로 이해하고 탐색할 수 있게 한다.
# 이후에는 특정 태그나 내용을 추출할 때 사용된다.
soup = BeautifulSoup(data.text, 'html.parser')
# 가져온 HTML 데이터에서 정확한 요소값을 가져와서 select_one()함수: 하나의 요소 값을 가져오는 함수를 사용해서 변수에 넣어줌.
title = soup.select_one("#body-content > div.main-wrap.clearfix > div.chart > div > div > table > tbody > tr:nth-child(2) > td.info > a.title.ellipsis")
print(title)
- 이렇게 하면 해당 필요한 값만 페이지에서 추출할 수 있는 프로그램이 완성된다.
# 참고 자료 출처: 채야미님 블로그 > https://chaeyami.tistory.com/12
'Programing > Python' 카테고리의 다른 글
28. 파이썬으로 하는 엑셀 작업 (0) | 2024.11.30 |
---|---|
27. 파이썬으로 만드는 기상 상태 제공 프로그램 (0) | 2024.11.26 |
25. 점프 투 파이썬 (외부 라이브러리) (0) | 2024.11.18 |
24. 점프 투 파이썬 (표준 라이브러리-3) (0) | 2024.11.18 |
23. 점프 투 파이썬 (표준 라이브러리-2) (3) | 2024.11.17 |