220609_TIL / Web Scraping

신두다·2022년 6월 9일
0

TIL

목록 보기
38/82

Key words

HTML/CSS, 크롤링, 웹 스크레이핑, DOM, beatifulsoup 라이브러리, requests 라이브러리

1. HTML, CSS, DOM

  • HTML의 기본 구조와 CSS, 자바 스크립트에 대해 개괄적인 공부를 했다.
  • 셋의 차이에 대해서는 아래 그림으로 정리 딱 되는 듯!
  • DOM에 대해서 처음 들었을 때 뭔지 헷갈렸는데, 쉽게 생각하면 html 문서를 구조화/객체화해서 파이썬으로 각 요소에 접근할 수 있게 해준다는 측면에서 의미가 있다고 생각하면 될 것 같다.
  • HTML, CSS 기본 구조에 대해서 배운 이유는, 오늘의 메인 주제인 웹 스크래이핑을 하기 위해, 사이트의 구조를 대략적으로 파악하고 내가 원하는 부분의 원하는 정보를 가지고 오도록 코드를 짜기 위함으로 생각하면 될 것 같다.
  • 하나 더 기억할 건, HTML 태그 목록 등은 다 외우려고 하지 말고, 필요할 때 찾아보면 된다는 것~
  • 이전 회사에서 온라인 쇼핑몰 위젯 설치, 수정 등에 대해서 운영 업무를 봤던 적이 있어서 개념 자체는 크게 낯설지는 않았다.
  • DOM 메소드 기억할 것
document.querySelectorAll('p') # p 태그를 사용하는 요소들을 볼 수 있다.
 
getElementsbyTagName: 태그 이름으로 문서의 요소들을 리턴
getElementById: 'id' 가 일치하는 요소들을 리턴
getElementsByClassName: '클래스' 가 일치하는 요소들을 리턴
querySelector: 셀렉터(들)과 일치하는 요소를 리턴
querySelectorAll: 셀렉터(들)과 일치하는 모든 요소들을 리턴

2. Web Scraping

  • Scaping과 Crawling의 차이에 대해서 내 언어는 깊이의 차이? 크롤링은 정해진 규칙에 따라 정해진 공간의 정보를 수집하는 과정을 말하고, 스크레핑은 좀 더 상위 개념였다. 스크레이핑을 좀 더 포괄적인 개념으로 생각하면 된다. (추가로 찾아본 블로그 글)
  • requests 라이브러리
    • 웹과 소통을 편하게 해주는 파이썬 라이브러리다. 오늘 사용한 주요 형태는 아래와 같다.

      import requests #참고로 기본 설치가 안되어있으므로 pip install 해줘야 함.
      
      requests.get('https://google.com') #페이지가 존재한다면 response로 200을 반환한다. 404에러 등 원래 알던 에러 종류를 반환하기도 한다.
      
      page = requests.get(Mymovie_URL) #주로 이렇게 할당해서 beautifulsoup로 넘겨 사용하였다.
  • Beatifulsoup 라이브러리
    설명 대신 코드를 남긴다. (오늘 과제할 때도 기본으로 깔고 갔던 코드다!)
import requests
from bs4 import BeautifulSoup

url = 'https://google.com'
page = requests.get(url)

soup = BeautifulSoup(page.content, 'html.parser')
#이렇게 soup로 지정해고나서 beautifulsoup의 다양한 메소드를 사용하면 된다.
# 클래스 검색! 
soup.find(class_ = 'result_thumb') #상위 하나만
soup.find_all(class_ = 'result_thumb') #전부!
#(참고로 id = 'dog') 식으로도 검색할 수 있다. 

#태그를 추가해서 검색도 가능!
cat_div_elements = soup.find_all('div', class_='cat')

#사용 예시
<p class='cat'>This is a p-cat</p> #이런 html 코드가 있다고 해보자.

cat_el = soup.find('p', class_='cat')
cat_el.text #=> 'This is a p-cat'
  • 내가 어떤 정보를 원하느냐에 따라 다양한 메소드는 그때 그때 상황에 맞게 더 찾아보며 하면 될 것 같다.

4. 실습한 것

사실상 오늘의 하이라이트였다.

  • 네이버 영화 페이지에서 여러 조건에 따라 리뷰 데이터를 가져오는 함수 만드는 과제를 했다.
  • 예를 들어, 원하는 페이지 수를 인자로 넣으면 1페이지부터 인자로 넣은 페이지 수까지의 리뷰 데이터를 전부 긁어온다거나 / 영화 제목을 넣으면 영화 코드 및 해당 영화의 리뷰를 알아서 가져오도록 한다거나 / 원하는 리뷰 수를 넣으면 그 수만큼의 리뷰를 가져온다거나..!!
  • 오늘도 도전과제까지 다 풀기는 했는데, 다른 동기들의 코드를 보면서 좀 더 클린하고 나은 코드를 찾아보는 시간을 별도로 한 번 가져야겠다.
    그때 공부노트에 정확히 푼 문제와 내가 적은 코드, 동기들에게서 참고한 더 나은 코드를 별도로 정리해보도록 하자~

Feeling


  • 작년 말에 혼자서 구글링하면서 웹 특정 게시판에서 1000개 정도의 게시글 정보를 크롤링해오는 파이썬 작업을 한 적이 있었는데, 오늘 해보니까 또 색달랐다. 그래도 그때는 뭘 모르고 퍼즐을 맞춰나가는 것 같았다면, 오늘은 뭘 알고 내가 직접 만드는 시간이었던 것 같아 매우 뿌듯하다.
  • 물론,, 지금 굉장히 지쳐있다ㅋㅋㅋ 힘들다.. 과제 푸는데 진짜 물도 안 마시고 풀 집중을 한 것 같다. 과제를 다 풀어서 만점을 받기는 했는데, 아무래도 requests, beautifulsoup을 좀 더 다양하게 활용하고 있다는 느낌은 덜 들어 좀 찝찝하다. 보충 공부 꼭 해야지..!
  • 오늘 배운 건 무조건 다 머릿속에 우겨넣으려고 하기보단, 내가 필요한 상황에 머릿속이건 구글에서건 꺼내가면서 쓴다는 느낌으로 마무리하는게 더 좋을 것 같다. 오늘도 고생했다!! 치킨 먹어야징~
profile
B2B SaaS 회사에서 Data Analyst로 일하고 있습니다.

0개의 댓글