23.03.24 ~ 23.03.30 동안 부트캠프에서 배웠던 내용을 정리한 학습일지입니다.
6주차에는 Python을 이용한 시각화와 크롤링을 배웠습니다.
Python의 경우 내용이 많다 보니, 효율적으로 공부하기 위해 스터디에 가입했습니다!!
(사실 가입할지 말지 엄청 고민했는데 Python 강의 듣자마자 '아, 스터디 가입 각이다' 하며 바로 가입했습니다 핳 )
저번주 금요일에 가입해서 활동 중인데, 열심히 하시는 분들이 많아 저도 더 열심히 하게 되는 거 같아요
부트캠프에 참여하시는 분들은 스터디를 한번 구해보시는 걸 추천드립니다 🤗🤗
시각화 같은 경우 내용이 많아서 다른 페이지에 정리를 해 뒀습니다.
관련 내용을 보신 분들은 https://data-gongbu.tistory.com/44 와 https://data-gongbu.tistory.com/45 로 이동해 주세요 :)
고로 이번 포스팅은 크롤링 부분만 정리하겠습니다!!
Python 시각화 노션 링크: https://solar-geology-c0d.notion.site/Seaborn-ba5163e0a3e641858c97075aa7ce7df3
크롤링 노션 링크: https://solar-geology-c0d.notion.site/b1e17c08fb164670ad48f5020bad0728
(+ 크롤링의 경우 실습 내용 추가 중에 있습니다. 내용을 다 추가하고 나면 이 부분은 지우도록 하겠습니다)
부트캠프 6주차 - 2023.03.24 ~ 2023.03.30 "데이터 분석을 위한 파이썬 프로그래밍 활용2"
1. HTML
- html 문서의 시작은 <html> 태그로 시작하고 </html> 태그로 끝남.
- 태그는 열리고 닫히는 구조를 가짐 (태그 종료 시 /가 붙음 )
- html 문서의 내부는 <head> 태그와 <body> 태그로 구성됨.
- 태그(요소)의 기능을 확장하기 위해 '속성'을 사용
- 부모와 자식 노드로 구성됨.
[태그 기본 구조]
<부모태그>
<자식태그></자식태그>
<자식태그></자식태그>
<자식태그></자식태그>
</부모태그>
<div class='news_info'>
<a href='주소1.com'> </a>
<a href='주소2.com'> </a>
<a href='주소3.com'> </a>
</div>
해당 html 구조를 예를 들어 보면 div 태그는 a태그의 부모 태그이고 a 태그는 div 태그의 자식 태그입니다.
[크롤링에서 자주 사용되는 태그 종류]
- div : 구역 나누기
- a : 링크
- h1 : 제목
- p : 문단
- ul, li : 목록
2. requests
- 웹 페이지의 문서 정보를 가져올 때 사용하는 것
- pip install requests를 통해 설치
- requests.get(url) : 해당 웹페이지 호출 결과를 가진 response 객체를 리턴
- statuse_code : http status 결과 체크 (200이면 정상)
- raise_for_status() : response에서 에러가 있을 경우 프로그램을 중단
원하는 url의 html 가져오기
# 네이버 html 가져오기
import requests
url = 'https://www.naver.com/'
res = requests.get(url)
오류 확인 방법1
print(res.status_code) # 응답코드가 200이면 정상
오류 확인 방법2
res.raise_for_status() # 아래 if문과 동일한 기능을 하는 함수
print('웹 스크래핑을 진행합니다')
'''
if res.status_code == 200:
print('정상입니다')
else:
print(f'문제가 생겼습니다. 에러코드는 {res.status_code}')
'''
오류가 없는 경우, 가져온 html 내용 출력
html = res.text
print(html)
3. Beautifulsoup
- HTML 분석을 위한 파이썬 라이브러리
- pip install BeautifulSoup를 통해 설치
- soup = Beautifulsoup(html 코드, html 번역 타입)
- soup.select() : 여러 개의 태그 선택하고 싶을 때 사용
- soup.select_one(): 하나의 태그를 선택하고 싶을 때 사용
BeautifulSoup 객체 생성
import requests
from bs4 import BeautifulSoup
# 원하는 url에서 html 받기
url = 'https://www.naver.com/'
res = requests.get(url)
html = res.text
# BeautifulSoup 객체 생성
soup = BeautifulSoup(html, 'html.parser')
구하고자 하는 내용은 빨간 박스로 표시되어 있는 '네이버를 시작페이지로'에 해당하는 태그입니다.
네이버를 시작페이지로 찾기
F12를 통해 내용을 찾으면, a태그의 NM_set_home_btn이라는 id로 존재합니다.
word = soup.select_one('#NM_set_home_btn')
print(word) # a태그 자체가 선택이 되어 출력
select_one 함수를 통해 구해진 word를 찍어보면 a 태그의 내용이 전부 구해진 걸 확인할 수 있습니다.
여기서 텍스트 요소만 출력하고 싶은 경우는 text 함수를 사용하면 됩니다.
텍스트 요소만 출력
print(word.text)
4. css
- 웹 사이트의 디자인을 표시하기 위한 언어
- 글자 색 변경, 폰트 크기, 가로 세로 길이 변경 등
- 디자인을 변경할 HTML 태그를 선택하는 것 == 크롤링할 때 HTML태그를 선택하는 것
[CSS 선택자 종류]
- 태그 선택자: 태그의 이름으로 선택
- id 선택자: 웹사이트 내에 한 개의 태그에 별명을 줄 때 사용
- class 선택자: 웹 사이트 내에 태그의 별명을 줄 때 사용
- 자식 선택자: 내가 원하는 태그에 별명이 없을 때 사용하며, 바로 아래에 있는 태그를 선택
5. 크롤링 예제
네이버 뉴스의 제목과 링크 가져오기
import requests
from bs4 import BeautifulSoup
url = 'https://search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90'
res = requests.get(url)
print(res.raise_for_status())
html = res.text #url에 존재하는 웹사이트 전체 정보
#전체 정보에서 원하는 정보를 쉽게 가져오기 위해 soup 객체로 변환
soup = BeautifulSoup(html, 'html.parser')
print(soup)
뉴스 제목의 경우 a태그에 존재합니다. (빨간 박스)
select 함수를 사용하여, 해당 페이지의 뉴스 제목만 출력을 진행하기 위해서 사용할 선택자는 class인 news_tit입니다.
(검색에 용이한 css는 class, id)
여기서, class 명이 동일한 게 몇 개인지 확인하기 위해 ctrl + f를 사용하여. news_tit를 검색하면,
10개의 동일 class가 존재한다고 나옵니다. (파란 박스)
목표는 페이지 상에 존재하는 뉴스 제목을 전부 출력하는 것이므로 한 페이지에 10개의 동일 class가 존재하는 게 맞기 때문에 select를 사용하여 내용을 서치를 진행합니다.
links = soup.select('.news_tit') # 뉴스 제목
print(links) # 결과가 리스트로 반환
print를 하면 엄청 긴 리스트가 출력되는데,
리스트는 반복 가능 객체이기 때문에 for문을 사용하여 제목과 링크를 매칭할 수 있습니다.
for link in links:
title = link.text # 태그안에 텍스트 요소를 가져온다
title_link = link.attrs['href'] #href의 속성값을 가져온다
print(title, title_link)
+ 크롤링에 대한 기초적인 내용을 정리해 봤습니다.
학습이 부족한 거 같아서 개인적으로 다른 인강도 들어보고 여러 시도를 하고 있는데
웹 페이지 같은 경우 계속해서 구조가 변경되기 때문에 강의에서 진행하는 방법이 막혀 좌절하던 찰나🥹
마침 오늘 피어세션에서 크롤링 마스터 분이 계셔서 팁을 좀 여쭤봤습니다
우선 기본 개념을 잡고 계속해서 시도를 하는 것 밖에 답이 없다고 하셨습니다
자기도 처음에는 이틀 걸리던 게 지금은 3시간이면 금방 하고 복붙에 연속이니까 열심히 구글링 해보라고 현실적인 조언을 주셨습니다.
(같은 수강생끼리 이렇게 공부 팁을 나눌 수 있는 게 좋았습니다.)
개인적으로 꼭 해보고 싶던 크롤링이 있는데, 하루빨리 기본 개념을 잡아서 도전하겠습니다!!
'데이터 분석 > 데이터 분석 부트캠프' 카테고리의 다른 글
[패스트캠퍼스] 데이터 분석 부트캠프 8기 솔직후기 (7) | 2023.06.15 |
---|---|
[패스트캠퍼스] 데이터 분석 부트캠프 8기 9주차 학습일지 (2) | 2023.04.20 |
[패스트캠퍼스] 데이터 분석 부트캠프 8기 5주차 학습일지 (0) | 2023.03.23 |
[패스트캠퍼스] 데이터 분석 부트캠프 8기 4주차 학습일지 (0) | 2023.03.16 |
[패스트캠퍼스] 데이터 분석 부트캠프 8기 3주차 학습일지 (0) | 2023.03.09 |