본문 바로가기

Python

[Python] 크롤링 기본 ( BeautifulSoup - 1 )

웹 크롤링을 하기 위해서는 HTML 기본 구조를 알아야 한다.

아래 링크에 HTML 기본 구조 내용을 작성해 두었다.

https://omhdydy.tistory.com/8

 

1. Beatiful Soup이란?
HTML 및 XML 파일에서 데이터를 가져오기 위한 Python 라이브러리로,
선호하는 Parser와 함께 작동하여 구문 분석트리를 탐색, 검색, 수정 하는 관용적 방법을 제공 함.

2. 설치 방법

필자는 pip를 통한 설치를 진행하였음.

$ pip install beautifulsoup4

3. 코드 작성

>>> from bs4 import BeautifulSoup
>>> 
>>> html_doc = """
... <html><head><title>The Dormouse's story</title></head>
... 
... <p class="title"><b>The Dormouse's story</b></p>
... 
... <p class="story">Once upon a time there were three little sisters; and their names were
... <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
... <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
... <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
... and they lived at the bottom of a well.</p>
... 
... <p class="story">...</p>
... """
>>> 
>>> soup = BeautifulSoup(html_doc)
>>> print(soup)
<html><head><title>The Dormouse's story</title></head>
<body><p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
</body></html>

- from/import를 통하여 BeautifulSoup 라이브러리를 호출 함

- html_doc 변수에 html 예제 데이터를 담음

- soup 변수에 BeautifulSoup 함수를 담아 결과를 출력 함.

 

4. BeautifulSoup 기본 라이브러리 사용

 

>>> soup.title ### HTML title의 태그와 content 모두를 호출 함.
<title>The Dormouse's story</title>
>>> soup.title.name ### HTML title의 Tag 이름을 호출 함.
'title'
>>> soup.title.string ### HTML title의 content만 호출 함.
"The Dormouse's story"
>>> soup.title.parent.name ### HTML title의 상위 tag 명을 호출 함.
'head'
>>> soup.p ## html의 paragraph tag와 content를 호출 함.
<p class="title"><b>The Dormouse's story</b></p>
>>> soup.p['class'] ## HTML paragraph class의 value를 호출 함.
['title']
>>> soup.a ### HTML a의 tag와 content를 호출 함, a가 여러 개일 경우 최 상위 한개만 호출 됨.
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
>>> soup.find_all('a') ### find_all 함수는 HTML 모든 a tag를 호출 함.
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
>>> soup.find(id="link3") ### html에 id="link3"을 가진 tag 및 content를 호출 함.
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
>>> for link in soup.find_all('a'): ### HTML 모든 a 태그 중 href 부분만 호출 함.
...     print(link.get('href'))
... 
http://example.com/elsie
http://example.com/lacie
http://example.com/tillie
>>> print(soup.get_text()) ### tag를 제외한 모든 content만 출력 함.
The Dormouse's story
The Dormouse's story
Once upon a time there were three little sisters; and their names were
Elsie,
Lacie and
Tillie;
and they lived at the bottom of a well.
...

 

참고 문서 : https://www.crummy.com/software/BeautifulSoup/bs4/doc/

'Python' 카테고리의 다른 글

[Python] 크롤링 기본 ( HTML 구조 )  (0) 2021.06.20