데이터/데이터

[BeautifulSoup] 크롤링 환경 설정, 태그, 글자 추출

rinaisme 2023. 7. 23. 17:19

안녕하세요!

 

오늘은 크롤링 기초에 대해 정리하겠습니다.

 


 

 

1. BeautifulSoup 환경 구성하기

 

 

!pip install beautifulSoup4

 

먼저 beautifulSoup4를 설치합니다.

 

 

이후

 

bs4라는 패키지로부터 BeautifulSoup라는 모듈을 임포트 합니다.

 

 

# bs4라는 패키지로부터 BeautifulSoup라는 모듈을 임포트
from bs4 import BeautifulSoup

 

html = """
<html>
    <body>
        <h1 id='title'>[1]크롤링이란?</h1>
        <p class='cssstyle'>웹페이지에서 필요한 데이터를 추출하는 것</p>
        <p id='body' align='center'>파이썬을 중심으로 다양한 웹크롤링 기술 발달</p>
        <a href = 'http://www.facebook.com'> 바로가기 </a>
        <ul id="aladin_list">
            <li class="cssstyle" id='start'>[국내도서]신나는 파이썬</li>
            <li class="course" id='start'>[국내도서] 혼자 공부하는 파이썬</li>
            <li class="course" id='end'><a href="https://www.aladin.co.kr">[국내도서] Effective Python 2nd 이펙티브 파이썬 : 파이썬 코딩의 기술 </a></li>
        </ul>
        <img src='https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Dumbo-hires_%28cropped%29.jpg/330px-Dumbo-hires_%28cropped%29.jpg'>
    </body>
</html>
"""

 

html을 가정했을 때 아래와 같이 지정해 줍니다.

 

# BeautifulSoup 인스턴스 생성. 두번째 매개변수는 분석할 분석기(parser)의 종류.
soup = BeautifulSoup(html, 'html.parser')

 

 


 

 

2. 태그 선택

 

 

2-1. 태그 이름이 tag1인 html요소를 리스트 형태로 모두 반환한다. 

    soup.select('tag1')

2-2. 태그 이름이 tag1인 html요소 중 첫 번째 요소만 반환한다.

   soup.select_one('tag1')

 

 

# <body> 태그를 입력
soup.select('body')

soup.select() 결과

 

# 첫 번째 p 태그 요소 반환
soup.select_one('p')

soup.select_one() 결과

 

 

2-3 하위 태그 선택

 바로 아래 자식요소만 선택합니다. 
 '>'를 사용합니다. 

    soup.select('tag1 > tag2')

길이가 너무 긴 경우 중간 생략하고 하위 요소를 선택합니다. 
공백을 사용합니다. 

    soup.select('tag1 tag2')

 

 

soup.select('body>ul>li')

하위 태그 결과

 

 

2-4. css class이름으로 검색


클래스이름'** 으로 검색한다. 
class이름 앞에 점(.)을 사용해야 한다.

    soup.select('. class1')
    soup.select_one('. class1')

 

#둘을 구별하려면 더 자세히
soup.select('p.cssstyle')

 

class 이름 결과

 

2-5. id 이름으로 검색


#id이름** 으로 검색
id 값은 중복되지 않은 유일한 값이다.
찾고자 하는 태그에 id값이 있다면 더 쉽게 검색 가능하다.

    soup.select('#id1')
    soup.selec_one('#id1')

 

#id는 중요한포인트에만 지정, 그래서 유일한 값이기에 id가 있으면 바로 접근해야함
soup.select('li#end')

#id 결과

 


 

3. 태그 문자 추출

 

 

3-1. 태그사이의 문자 추출

<h1 id='title'>[1] 크롤링이란? </h1>

 태그사이의 문자열 추출
:. get_text() 또는. text를 사용

 

 

soup.select_one('p.cssstyle').get_text()
soup.select_one('p.cssstyle').text

.text 추출 결과

 

3-2 태그의 속성값 가져오기

<a href="https://www.aladin.co.kr">[국내도서] 혼자 공부하는 파이썬 </a>
<img src="/assets/img/octopus.jpg" width="200px">


이미지나 하이퍼링크에 대한 정보는 태그의 속성에 들어있다. 
태그의 속성값 추출해야 한다. 
item ['속성이름']
item.get('속성이름')

 

#attribute 값 가져오기
atag['href']

속성 결과

 

감사합니다!