[Python] BeautifulSoup 간단 사용법

반응형
    반응형

    BeautifulSoup의 간단한 메소드 소개를 할까합니다.

    웹크롤링을 하게 되면 개발자모드에서 데이터를 가져옵니다. 개발자모드를 보면 알겠지만 데이터는 보통 html로 되어있습니다. 그걸 다 가져올수는 없고 제가 필요한 부분만 가져와야 합니다. 더구나 데이터가 많거나 웹사이트가 무거운 경우는 일일히 찾아서 복사해서 붙여넣을수도 없습니다. 그런 불편함을 BeautifulSoup으로 해결할 수 있습니다.

    BeautifulSoup으로 html에서 필요한 부분을 가져올 수 있습니다.

     

    html = '''
    <html>
      <head>
        <title>책 소개 </title>
        </head>
        <body>
        <div id='upper' class='test'>
        <h1 title='Picture'>그림책</h1>
            <p class ="text">Tap</p>
        
        </div>
        <h2>그림책이란?
        <p class = "text"> 그림책은 그림으로 설명하는 책을 말합니다</p>
        </h2>
            
        </body>
        </html>'''

    html 하나를 만들고 한 번 다뤄보겠습니다.

     


    Find 함수

    from bs4 import BeautifulSoup
    soup = BeautifulSoup(html)
    soup.find(class_='test')

    find 함수는 특정 html tag를 검색할 때 씁니다. 검색 조건에 찾고자하는 tag를 넣어주면 됩니다.

    참고로 class는 파이썬에서 예약어라서 class_로 표기해야 됩니다.

    위 예에서는 class 가 test 인 것을 찾아달라고 해서 아래와 같이 나왔습니다.

    class 말고도 다른 것으로도 찾을 수 있습니다.

    soup.find('h1')

    원하는 tag를 넣으면 얼마든지 찾을 수 있습니다.

     

     

    shift+tap을 누르면 각 함수에 대한 인자값을 볼 수 있습니다. 여러개의 조건을 넣어서 찾고 싶다면 attrs를 추가해주어야 합니다.

    attrs를 보시면 dict로 되어 있습니다. dict로 적용해야 원하는 요청을 줄 수 있습니다.

    attrs = {'id':'upper','class':'test'} 
    soup.find('div',attrs = attrs)


    Find_all 함수

    find 함수는 조건에 맞는 하나의 tag만 찾는다면, find_all은 조건에 맞는 모든 tag를 리스트로써 찾아줍니다.

    soup.find_all(class_='text')

    리스트로써 반환해줍니다.

     


    Get_text 함수

    tag의 value를 바로 가져올 수 있습니다.

    tag = soup.find('h2')
    print(tag)
    tag.get_text().strip()

    tag = soup.find('div', id='upper')
    print(tag)
    tag.get_text().strip()


    attribute 값 추출

    <> 안에 써있는 attribute 값도 가져올 수 있습니다.

    tag = soup.find('h1')
    print(tag)
    tag['title']


    이상으로 Beautiful Soup의 간단한 사용법이었습니다.

    댓글

    Designed by JB FACTORY

    ....