Data/Crawling

1. 크롤링 기본 (Request, BeautifulSoup 소개 및 CSS 선택자)

코딩마루 2024. 3. 31. 20:33

1. HTML

HTML은 웹페이지의 구조를 나타내기 위한 언어로 태그로 구성된다. 태그는 꺾쇠 괄호로 표시되며 "시작 태그"와 "종료 태그"로 이루어지며 속성명과 속성값이 있을 수 있다. 예를 들어 아래와 같은 형태를 가진다.

<tagName attrName="attrValue"> Content </tagName>

크롤링에서 자주 사용되는 태그는 다음과 같다.

태그명 역할
div 구역 분할 <div> Content </div>
a 링크 <a href="https://www.naver.com"> Naver </a>
h1 제목 <h1> Title </h1>
p 문단 <p> Paragraph </p>
ul, li 목록 <ul>
   <li>Americano</li>
   <li>Latte</li>
   <li>Tea
      <ul>
         <li>Chamomile</li>
         <li>Peppermint</li>
      </ul>
    </li>
</ul>    

태그에는 부모 태그와 자식 태그가 있다. 예를 들어 아래와 같은 형태를 가진다.

<parentTag>
   <childTag>Content1</childTag>
   <childTag>Content2</childTag>
</parentTag>

2. Requests

Requests란 HTTP 통신을 위한 파이썬 라이브러리이다.

  • HTTP 통신은 요청과 응답으로 이루어지며 Get과 Post 요청이 있다. 예를 들어, Get은 뉴스 1페이지를 보여달라고 요청하는 것이고, 응답으로는 해당 페이지를 보여준다. 반면 Post 요청은 특정 정보들과 함께 서버에 요청을 보낸다. 그리고 서버는 해당하는 응답을 보내준다.

먼저 Request 라이브러리를 설치해보자. 터미널에 아래 명령어를 입력하면 된다.

pip install requests

그리고 requests 라이브러리 사용법을 알아보자. 먼저 import를 통해 라이브러리를 가져와야한다. 그리고 requests.get()함수에 내가 원하는 사이트의 주소를 인자로 전달해주면 된다. 그러면 해당 Get 요청에 대한 응답을 가져올 수 있다.

import requests

response = requests.get("https://www.naver.com")
html = response.text
print(html)
  • response.text: response의 text 요소에는 html 코드가 들어있다. 

3. Beautifulsoup

Beautifulsoup는 HTML을 분석하기 위한 파이썬 라이브러리이다. 아래 명령어로 설치가 가능하다.

pip install beautifulsoup4

아래와 같이 특정 클래스를 가지는 태그 하나를 가져올 수 있다.

import requests
from bs4 import BeautifulSoup

response = requests.get("https://www.naver.com/")
html = response.text

soup = BeautifulSoup(html, 'html.parser')
result = soup.select_one('.blind')
print(result)
  • Beautifulsoup(html, 'html.parser'): html 문자열에 대해서 html을 파싱한다.
  • soup.select_one('.blind'): class명이 blind인 태그 하나를 가져온다.

해당 코드의 결과는 아래와 같다.

4. CSS 선택자

CSS란 웹사이트에 디자인을 적용하기 위한 언어이다. 글자 색 변경, 폰트 크기 등의 이미지 지정이 가능하다. CSS 선택자는 디자인을 변경할 HTML 태그를 선택하는 방법으로 이것을 그대로 크롤링에 적용할 수 있다. 이때 CSS 선택자로는 "태그 선택자", "id 선택자", "class 선택자", "자식 선택자" 등이 있다.

선택자 이름 방법 HTML CSS 선택자
태그 선택자 테그 이름 <div> divTag </div> div
id 선택자 #(id 이름) <div id="id1"> divTag </div> #id1
class 선택자 .(class 이름) <div class="class1"> divTag </div> .class1
자식 선택자 바로 아래 태그 <div class="class1">
   <a> link </a>
</div>
.class1 > a

참고자료: https://www.inflearn.com/course/파이썬-크롤링-기초