slide-image
참고 서적 : 파이썬을 이용한 머신러닝, 딥러닝 실전 개발 입문 (서적 주소)

 


1-2. BeautifulSoup로 스크래핑 하기

 

scraping이란 웹 사이트에서 데이터를 추출하고, 원하는 정보를 추출하는 것이다.

파이썬의 "BeautifulSoup" 라이브러리를 사용하면 간단하게 HTML과 XML에서 정보를 추출할 수 있다.

 

 

1) BeautifulSoup 설치

  파이썬 라이브러리 설치 시 pip 명령어를 사용한다. pip은 파이썬 패키지 관리 시스템이며, 파이썬 패키지는 Python Package Index(PyPI)에서 확인 가능하다. (https://pypi.org/)

$ pip3 install beautifulsoup4

 

2) BeautifulSoup 기본 사용법

  다음 예제는 웹 사이트로부터 HTML을 가져오는 것이 아닌 문자열로 만들어 사용하고 있다. 문자열 분석을 완료한 후 결과를 출력한다.

import bs4
import string
#분석 하려는 HTML 선언
html = """
<html>
    <body>
        <h1>스크래핑이란?</h1>
        <p>웹 페이지를 분석하는 것</p>
        <p>원하는 부분을 추출하는 것</p>
    </body>
</html>
"""

#HTML 분석
soup = bs4.BeautifulSoup(html, 'html.parser')
h1 = soup.html.body.h1
p1 = soup.html.body.p
p2 = p1.next_sibling.next_sibling
#next_sibling 사용 시 줄바꿈 또는 공백이 추출되어 다음 태그를 출력하게 된다.

#요소의 글자 출력
print("h1 = " + h1.string)
print("p1 = " + p1.string)
print("p2 = " + p2.string) 

output

h1 = 스크래핑이란?
p1 = 웹 페이지를 분석하는 것
p2 = 원하는 부분을 추출하는 것

BeautifulSoup 객체를 생성하여 해당 html을 지정하고 분석할 분석기 종류를 지정한다.(html.parser)

 

위와 같이 html에 바로 접근 할 수도 있지만 id이름으로 접근하면 좀 더 간단하게 요소를 찾을 수 있다.

 

[id로 요소 찾는 방법] - find()

import bs4
import string
#분석 하려는 HTML 선언
html = """
<html>
    <body>
        <h1 id = "title">스크래핑이란?</h1>
        <p id = "body">웹 페이지를 분석하는 것</p>
        <p>원하는 부분을 추출하는 것</p>
    </body>
</html>
"""

#HTML 분석
soup = bs4.BeautifulSoup(html, 'html.parser')
title = soup.find(id = "title")
body = soup.find(id = "body")

#요소의 글자 출력
print("title = " + title.string)
print("body = " + body.string)

 

 

[여러 개의 요소 추출하기] - find_all()

 여러 개의 태그를 한 번에 추출하고 싶을 때 find_all() 메서드를 사용한다. BeautrifulSoup객체를 통해 a태그의 내용들을 받아오고 반복문으로 a의 href요소와 text 내용을 가져왔다.

import bs4
html = """
<html><body>
    <ul>
        <li><a href="http://www.naver.com">naver</a></li>
        <li><a href="http://www.daum.net">daum</a></li>
    </ul>
</body></html>
"""

#HTML 분석하기
soup = bs4.BeautifulSoup(html, 'html.parser')

#find_all()
links = soup.find_all("a")

#링크 목록 추출
for a in links:
    href = a.attrs['href']
    text = a.string
    print(text, ">", href)

 

'Dev Study > BigData' 카테고리의 다른 글

Elasticsearch Java Plugin 개발하기 (파일 검색)  (0) 2020.05.03
[Solr] Boosting 종류  (0) 2020.02.04
[Hadoop] HDFS 개괄-번역 작업  (0) 2019.07.12
[Python] 1. 크롤링(2)  (0) 2019.07.11
[Python] 1. 크롤링(1)  (0) 2019.07.09