본문 바로가기

카테고리 없음

[파이썬] 웹 크롤링: 코드 10줄로 HTML을 Text로 변환하기

종종 웹 사이트에서 텍스트를 가져와야 할 때가 있습니다. 간단한 파이썬 코드를 이용해서 HTML 문서를 일반 텍스트로 가져오는 방법을 알아보겠습니다.

 

import requests
from bs4 import BeautifulSoup

url = 'https://news.naver.com/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=001&aid=0011343153'
html = requests.get(url)
soup = BeautifulSoup(html.text)

# find_all 함수에 매개변수로 리스트를 전달합니다.
# 다음 코드는 HTML 문서의 모든 'script', 'style', 'header', 'footer', 'form' 태그를 반환합니다.
script_tag = soup.find_all(['script', 'style', 'header', 'footer', 'form'])

# extract 함수는 soup 객체에서 해당 태그를 제거합니다.
for script in script_tag:
    script.extract()

# 텍스트 단위 결합을 '\n'(줄바꿈)으로 합니다.
# 각 텍스트 단위의 시작과 끝에서 공백을 제거합니다.
content = soup.get_text('\n', strip=True)
print(content)    

손쉽게 코드 10줄로 HTML 문서에서 텍스트만 추출해냈습니다. 코드를 조금 더 손보면 원하는 정보만 선택해 낼 수도 있습니다.

 

find_all()은 BeautiBeautifulSoup에서 가장 자주 쓰이는 함수 중 하나입니다. 이 함수를 쓰면 원하는 태그를 다양하게 필터링할 수 있습니다. 매개변수로 태그 이름인 문자열을 넘기거나, 태그 이름으로 이루어진 리스트를 전달할 수도 있습니다. 아래 예제를 보겠습니다.

 

html = """
<h1>Kim's story</h1>,
<p>one, two, three</p>,
<p>four, five, six</p>,
<a class=name>Kim</a>,
<a class=name>Lee</a>,
<a class=name>Park</a>
"""

soup = BeautifulSoup(html)

soup.find_all('p')
# >>> [<p>one, two, three</p>, <p>four, five, six</p>]

soup.find_all('a')
# >>> [<a class="name">Kim</a>, <a class="name">Lee</a>, <a class="name">Park</a>]

soup.find_all(['p', 'a'])
# >>> [<p>one, two, three</p>, <p>four, five, six</p>, <a class="name">Kim</a>, <a class="name">Lee</a>, <a class="name">Park</a>]

 

매개 변수로 리스트를 전달했을 경우 or 조건처럼 매칭 되는 모든 결과를 반환합니다.

 

 

-이 글의 코드는 아나콘다(Anaconda3)가 설치된 주피터 노트북에서 작성되었습니다.