개발/웹 스크래핑

[Web Scraping 기초] BeautifulSoup을 이용한 웹 스크래핑

devculture309 2023. 4. 19. 15:05
반응형

1) BeautifulSoup으로 원하는 요소 추출하기

- 다음 사이트에 있는 책들의 이름 정보를 스크래핑 해보자

http://books.toscrape.com/catalogue/category/books/travel_2/index.html

 

Travel | Books to Scrape - Sandbox

£44.34 In stock

books.toscrape.com

- 해당 웹 페이지는 임의의 책 정보가 담긴 웹 사이트이다.

- 스크래핑을 하기 위해선 특정 웹 페이지 전체에 어디 있는지 알아야 한다

- 그러기 위해선 전체 HTML을 분석할 줄 알아야 하는데, 이것을 돕는 도구가 웹브라우저의 '개발자 도구' 이다

- 알고싶은 곳에 커서를 두고 우클릭 후 검사 를 누르면 된다.

- 개발자 도구를통해 요소를 확인하고 그 태그를 타게팅해서 스크래핑 하는 것을 '콘텐츠 기반 스크래핑'이고 한다

- 방식은 간단하나 대상 사이트의 구조가 바뀔 가능성이 크기 때문에 그렇게 좋은 선택지는 아니다

- 다음은 책 제목을 스크래핑하는 과정이다

① 스크래핑에 필요한 라이브러리 호출

import requests
from bs4 import BeautifulSoup

② 예시 사이트에 get 요청 진행하고, 응답을 바탕으로 BeautifulSoup 객체 생성

res = requests.get("http://books.toscrape.com/catalogue/category/books/travel_2/index.html")
soup = BeautifulSoup(res.text, "html.parser")

  - 진행하기 전에 스크래핑 하고자 하는 사이트를 먼저 들어가 사이트와 관련한 이상유무를 먼저 확인하는 것이 좋다

③ <h3> 태그에 해당되는 요소 모두 찾기

  - 책 제목은 h3 태그에 해당되는 요소이기 때문에 h3 태그에 해당되는 모든 요소를 찾는다

-

h3 = soup.find_all("h3")
h3

④ 제목 추출하기

  -  스크래핑하고자 하는 책 제목은 a 태그의 콘텐츠이지만, a태그의 콘텐츠엔 책 제목이 일정 길이가 넘어가면 줄임말(...)

   이 써져있는 것을 볼수있다

  - 우리가 추출하고자 하는 진짜 제목은 a 태그의 속성(attributd)인 'title'에 있다는 것을 알 수 있다

  - 태그 내 속성들은 key, value인 dict 형태로 저장되기 때문에 제목을 추출하기 위해선 다음과 같이 한다

for book in h3 :
    print(book.a["title"]) # 위 반복문 보안

 

 

2) Locator로 원하는 요소 찾기

- 태그는 자신의 이름 뿐만 아니라 속성(attribute) 또한 가질 수 있다

- 이 중 'id'와 'class'는 대표적인 Locator로서, 특정 태그를 지칭하는 데 사용된다

  ※ id : "하나의" 고유 태그를 가리키는 라벨 / class : "여러(유사한)" 태그를 묶는 라벨

① Locator 없이 요소 가져오기

  - Locator 없이 요소 찾게 되면 태그간 겹침으로 인해 원하는 요소를 가져오지 못하는 상황이 발생할 수 있다

② id를 활용하여 요소 가져오기

  - id는 문서에서 unique한 별며이기 때문에 태그 단 하나를 쉽게 가져올 수 있다

③ class를 이용해서 요소(들) 가죠오기

  - class는 유사한 요소들을 구분짓는 별명이다.

 

 3) 페이지네이션(Pagination)

  - 많은 정보를 인덱스로 구분하는 기법이다

  - 과도한 요청을  방지하기 위해 time.sleep 메소드를 활용하는 것이 좋다

반응형