Appia의 IT세상

Python[파이썬 웹크롤러] 05-WebCrawler beautifulsoup4(뷰티풀 수프) 웹페이지(HTML)를 파싱하기(Parsing) 본문

Python/Python Crawler[크롤러]

Python[파이썬 웹크롤러] 05-WebCrawler beautifulsoup4(뷰티풀 수프) 웹페이지(HTML)를 파싱하기(Parsing)

Appia 2020. 10. 24. 07:09
반응형

Python[파이썬 웹크롤러] 05-WebCrawler beautifulsoup4(뷰티풀 수프)

웹페이지를 파싱하기(Parsing)

 

앞서 포스팅에서는 beautifulsoup4(뷰티풀 수프)를 설치하는 방법과 왜 beautifulsoup4(뷰티풀 수프)를사용하는지에 대해서 간단히 이야기 해봤습니다. 이번 포스팅에서는 beautifulsoup4(뷰티풀 수프)를 통해서 간단히 웹페이지를 파싱하는 방법에 대해서 이야기를 해볼까 합니다. 

 

먼저 흔히들 beautifulsoup4(뷰티풀 수프)을 통해서 웹페이지 또는 Html 등의 파일을 Parsing 한다고 하면 수프를 만든다고 이야기를 합니다. 수프를 만드기 위해서는 관련해서 파서등을 사용해야 합니다. 관련해서는 다음과 같은 파서등을 지원하고 있습니다. 

 beautifulsoup4(뷰티풀 수프) Parser 종류

물론, 다들 장단점이 다르지만, 저의 경우 주로, html.parser을 사용합니다. 그럼 간단히 한번 살펴보겠습니다. 물론 경우에 따라서, xml을 사용할 경우 lxml을 사용한느 경우도 있지만 크롤러의 경우에는 Html.parser로 충분합니다. 

 

그럼 이제는 총 2가지로 소스를 바탕으로 수프를 만들어보겠습니다. 

1. HTML파일을 파싱하기 

2. 웹페이지(WebPage)를 파싱하기 

그럼 각각에 대해서 살펴보도록 하겠습니다. 

 

1. HTML 파일을 파싱하기 

HTML파일을 읽어오기 위해서는 파일 입출력을 함께 사용하셔야 합니다. 

파이썬[Python] 010 파일 입출력

 

파이썬[Python] 010 파일 입출력

모든 프로그래밍을 하면, 관련해서 결과물을 얻기를 바랍니다. 즉, 콘솔 창에 코딩에 대한 결과를 원하든 아니면, 파일로 관련해서 결과를 원하던, 어떤 형태로든 결과가 출력 되길 원할 것입니

appia.tistory.com

위의 부분을 활용하여 다음과 같은 코드를 작성해보겠습니다. 

1
2
3
4
5
6
from bs4 import BeautifulSoup
 
with open("happy.html"as fs:
    soup = BeautifulSoup(fs, 'html.parser')
 
print(soup)
cs

위의 코드를 실행하면 다음과 같은 결과가 나타납니다. 

1
2
3
4
5
6
7
8
9
10
11
....
</head>
<body lang="KO" style="tab-interval:40.0pt;word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">안녕하세요 </p>
<p class="MsoNormal">시작입니다<span lang="EN-US"></span></p>
<p class="MsoNormal"><span lang="EN-US">Appia</span>입니다<span lang="EN-US"></span></p>
<p class="MsoNormal">침착하세요<span lang="EN-US">.</span></p>
</div>
</body>
</html>
cs

 

2. 웹페이지(WebPage)를 파싱하기 

먼저 웹페이지(WebPage)를 파싱하기 위해서는 먼저 Reuqest 모듈을 사용하셔야 합니다. Request 모듈에 대해서는 다음 포스팅을 참조 하시길 바랍니다. 

 

Python[파이썬 웹크롤러] 03-WebCrawler 사이트의 내용(Html) 읽어오기(requests)

 

Python[파이썬 웹크롤러] 03-WebCrawler 사이트의 내용(Html) 읽어오기(requests)

Python[파이썬 웹크롤러] 03-WebCrawler 사이트의 내용(Html) 읽어오기 이번 포스팅에서는 사이트의 HTML의 내용을 읽어오는 부분에 대해서 포스팅을 해보고자 합니다. 앞서서는 header 부분만 읽어왔다면

appia.tistory.com

위의 링크의 있는 부분을 활용하여 다음과 같은 코드를 작성해봤습니다. 

1
2
3
4
5
6
7
import requests
from bs4 import BeautifulSoup
 
page = requests.get("https://appia.tistory.com")
soup = BeautifulSoup(page.content,'html.parser')
 
print(soup)
cs

위의 코드의 결과로 다음과 같은 결과가 나타납니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html>
 
<html lang="ko">
<head>
<link href="https://t1.daumcdn.net/tistory_admin/lib/lightbox/css/lightbox.min.css" rel="stylesheet" type="text/css"/><link href="https://t1.daumcdn.net/tistory_admin/assets/blog/tistory-d3000a74025b1649b2518a0efdb24746e237dd2c/blogs/style/content/font.css?_version_=tistory-d3000a74025b1649b2518a0efdb24746e237dd2c" rel="stylesheet" type="text/css"/><link href="https://t1.daumcdn.net/tistory_admin/assets/blog/tistory-d3000a74025b1649b2518a0efdb24746e237dd2c/blogs/style/content/content.css?_version_=tistory-d3000a74025b1649b2518a0efdb24746e237dd2c" rel="stylesheet" type="text/css"/><!--[if lt IE 9]><script src="https://t1.daumcdn.net/tistory_admin/lib/jquery/jquery-1.12.4.min.js"></script><![endif]--><!--[if gte IE 9]>
<!--><script src="https://t1.daumcdn.net/tistory_admin/lib/jquery/jquery-3.2.1.min.js"></script><!--<![endif]-->
<script src="https://t1.daumcdn.net/tistory_admin/lib/lightbox/js/lightbox-plus-jquery.min.js"></script>
<script>
lightbox.options.fadeDuration = 200;
lightbox.options.resizeDuration = 200;
lightbox.options.wrapAround = false;
lightbox.options.albumLabel = "%1 / %2";
</script>
<script>var tjQuery = jQuery.noConflict(true);</script><style type="text/css">.tt_article_useless_p_margin p {padding-top:0 !important;padding-bottom:0 !important;margin-top:0 !important;margin-bottom:0 !important;}</style><meta content="always" name="referrer"/><link href="//t1.daumcdn.net/tistory_admin/static/top/favicon_0630.ico" rel="icon"/><link href="//img1.daumcdn.net/thumb/C180x180/?fname=https%3A%2F%2Ftistory3.daumcdn.net%2Ftistory%2F2919201%2Fattach%2Fe226702a7ac94e989c9e4fd132b6536a" rel="apple-touch-icon"/>
<link href="//img1.daumcdn.net/thumb/C76x76/?fname=https%3A%2F%2Ftistory3.daumcdn.net%2Ftistory%2F2919201%2Fattach%2Fe226702a7ac94e989c9e4fd132b6536a" rel="apple-touch-icon" sizes="76x76"/>
.....
<div class="inner_layer_tooltip">
<p class="desc_g"></p>
</div>
</div>
<div class="layer_post" id="tistoryEtcLayer"></div><div class="layer_post" id="tistorySnsLayer"></div></body>
</html>
cs

 

 

실제 웹페이지의 내용에 대해서 모두 읽어왔습니다. 이 부분을 토대로, 본격적으로 원하는 데이터를 정리할 수 있습니다. 

 

이와 같이 2가지 형태로 데이터를 파싱하는 것에 대해서 살펴봤습니다. 이제 다음 포스팅에서는 본격적으로 데이터를 찾아가는 방법에 대해서 포스팅을 해보도록 하겠습니다. 이번 포스팅에서는 Python[파이썬 웹크롤러] 05-WebCrawler beautifulsoup4(뷰티풀 수프) 웹페이지(HTML)를 파싱하기(Parsing)라는 간단히 다루어 봤습니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments