• python 크롤링 beautifulSoup 사용해보기

    2018. 11. 16. 19:21

    by. 위지원

    데이터 읽어오는 방법은 학교에서 외부경로를 막았기때문에 코드만 보고넘겼다..


    대신 그 다음인 beautifulSoup 사용방법에 대해 알아보았다.


    BeautifulSoup메서드를 이용해서 html의 내용을 넘겨주면 11~13번 line과 같이 html의 각 태그의 데이터에 접근할 수 있다.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    html = """
    <html><body>
        <h1>beautifulSoup</h1>
        <p>webpage</p>
        <p>ABCDEFG</p>
    </body></html>
    """
     
    soup = BeautifulSoup(html, 'html.parser')
     
    h1 = soup.html.body.h1
    p1 = soup.html.body.p
    p2 = p1.next_sibling.next_sibling
    cs






    접근 방법은 더 있다.. 아래처럼 find라는 메서드로 태그를 직접 명시해서 찾을


    1
    2
    title = soup.find(id = "title")
    body = soup.find(id = "body" )
    cs


    여러개의 요소를 추출하는 방법도 있다.


    아래의 코드에서 find_all 메서드를 사용해 모든 <a> tag를 추출하고 attrs['href']를 이용하여 attrs 속성에서 href 속성을 추출한다.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    html = """
    <html><body>
        <ul>
            <li><a href = "http://www.naver.com">naver</a></li>
            <li><a href = "http://www.daume.net">daum</a></li>
        </ul>
    </body></html>
    """
     
     
    soup = BeautifulSoup(html, 'html.parser')
     
    links = soup.find_all("a")
     
    for a in links:
        href = a.attrs['href']
        text = a.string
        print(text,">",href)
    cs



    DOM(Document Object Model)은 HTML의 요소에 접근하는 구조를 나타내고 DOM 요소의 속성이란 각 태그 뒤에있는 속성을 이야기 하는것이다.


    python3 으로 대화형 모드로 한다음에 몇가지 코드를 넣어보자.


    >>> from bs4 import BeautifulSoup
    >>> soup = BeautifulSoup(
    ... "<p><a href = 'a.html'>test</a></p>",
    ... "html.parser")


    prettify를 이용하면 분석이 제대로 되었는지 확인 할 수 있다고 한다. 태그별로 분석이 다 된 것이 보인다.

    >>> soup.prettify()
    '<p>\n <a href="a.html">\n  test\n </a>\n</p>'


    >>> a = soup.p.a
    >>> type(a.attrs)
    <class 'dict'>
    >>> 'href' in a.attrs
    True
    >>> a['href']
    'a.html'