[WebCrawling] 웹사이트를 직접 분석해보자 -1편
Type: 데이터 수집 / 분석
주제: Web Crawling
사용 IDE: IntelliJ IDEA
사용 언어: Python
사용 패키지: bs4 - BeautifulSoup, requests - get
GitHub Link: https://github.com/TMInstaller/WebCrawling_Myblog
Why?? - 이걸 만들게 된 계기는?
최근 꾸준한 코딩 테스트 준비와 백엔드에 대해 학습을 하던 중
파이썬에 대한 온라인 강의를 접했다
이 강의에서는 파이썬의 기초와 함께 웹 스크래퍼를 만드는 내용이 포함되어있었고,
이를 활용했을 때 어떤 프로젝트를 만들 수 있을까 생각을 해 보았다
그러다가 126개나 쌓여있는 블로그의 글을 보고(비공개 글 포함)
내가 지금까지 작성해온 블로그의 데이터를 수집하면 어떨까 싶었다
참고했던 강좌 바로가기
사용 할 IDE는 IntelliJ로 하였다
JAVA쪽에 특화된 IDE이긴 하지만 단축키 및 사용법에
익숙해지면 후에 있을 프로젝트에 도움이 될 것 같아서 이 툴을 선택했다
설계 - 무엇을 얻어올까?
여러 번의 프로젝트를 진행하던 중 알게 된 중요한 사실은
코딩에 있어서 필요한 능력은 코드를 다룰 줄 아는 능력보다
무엇을 만들고자 하는가에 대한 목표를 명확히 설정하는 것이다
하지만 최종 목표를 바로 떠올리기는 힘들었기에 당장의 간단한 목표 한가지를 설정하고 이를 만들어보기로 했다
목표: 메인화면에 있는 제목 부분에 대한 정보를 얻어오자
코드 작성
1. 웹 정보를 얻어올 파이썬 모듈 import
2. 블로그 url의 정보를 얻어올 코드 작성
3. 오류가 났을 때 원인을 파악할 수 있도록 조건문 작성
4. 정상적으로 실행 될 시 BeautifulSoup를 이용해 원하는 부분을 출력하는 코드 작성
1. 웹 정보를 얻어올 파이썬 모듈 import
from requests import get
from bs4 import BeautifulSoup
이번 편에서는 requests의 get method와 bs4의 BeautifulSoup method를 이용하여 정보를 얻어올 것이다
+ 패키지 정보가 필요하다면?
2. 블로그 url의 정보를 얻어올 코드 작성
url = "https://time-map-installer.tistory.com/"
response = get(url)
url 변수에 나의 블로그의 링크를 넣어두었고
response에 url의 정보를 get()을 이용해서 가져오려고 한다
response = 응답
3. 오류가 났을 때 원인을 파악할 수 있도록 조건문 작성
if response.status_code != 200:
# status_code가 200이 아니면 정상적인 실행이 아니라는 뜻이다
print("페이지를 불러올 수 없습니다", response.status_code)
else:
response 변수에서 제대로 된 응답이 가능할 경우
.status_code를 이용해 출력해 보면 200이 나온다.
어딘가에 문제가 있으면 다른 response코드들이 나오는데, 아래에서 확인할 수 있다
4. 정상적으로 실행 될 시 BeautifulSoup를 이용해 원하는 부분을 출력하는 코드 작성
# else:
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.find_all('div', class_='post-item'))
soup 변수를 생성해 BeautifulSoup를 이용해 웹 정보를 얻어올 준비를 하고,
잘 실행되는지 .find_all('목표 태그', class_='목표 클래스')를 이용해 출력을 해 본다
출력하려는 부분은 웹페이지에서 F12를 눌러 개발자 모드에서 확인 한 결과
div 태그의 post-item 전체였기에 위와 같이 작성하였다
0. 전체 코드 / 실행 결과
# main.py
from requests import get
from bs4 import BeautifulSoup
# 블로그의 메인 페이지에서 각 글들의 정보를 긁어 올 프로그램을 생성 할 예정
url = "https://time-map-installer.tistory.com/"
response = get(url)
# get() = 입력 받은 url의 정보를 받아오는 코드
if response.status_code != 200:
# status_code가 200이 아니면 정상적인 실행이 아니라는 뜻이다
print("페이지를 불러올 수 없습니다", response.status_code)
else:
# 정상적으로 불러오는 데에 성공 했을 때 실행 할 부분
# Make BeautifulSoup to soup prepare the text of the website
soup = BeautifulSoup(response.text, 'html.parser')
# we are going to print all the
print(soup.find_all('div', class_='post-item'))
주석을 달아 둔 전체 코드와 실행결과이다
다음 편에서 계속됩니다