Appia의 IT세상

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

Python/Python Crawler[크롤러]

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

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

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

 

이번 포스팅에서는 사이트의 HTML의 내용을 읽어오는 부분에 대해서 포스팅을 해보고자 합니다. 앞서서는 header 부분만 읽어왔다면, 이번에는 HTML 내용 전체를 가져오는 방법에 대해서 살펴보겠습니다. 일단 앞서 부분과 거의 유사한 부분이지만, 다시 한번 코드를 한번 살펴보겠습니다. 

 

import requests as rq
 
url = 'https://appia.tistory.com'
 
result = rq.get(url)
 
print(result.text)
cs

 

get()을 통해서 가져온 결과에서 result.text를 통해서 HTML 전체 코드를 가져올 수 있습니다. 위의 코드를 실행하면 다음과 같은 결과가 나옵니다. 

<!doctype html>
<html lang="ko">
<head>
    <title>TISTORY</title>
    <meta charset="utf-8">
    <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, width=device-width">
    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/font.css">
    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/error_20190814.css">
</head>
<body>
<div id="kakaoIndex">
    <a href="#kakaoBody">본문 ë°”로가기</a>
    <a href="#kakaoGnb">메뉴 ë°”로가기</a>
</div>
<div id="kakaoWrap" class="tistory_type3">
    <div id="kakaoContent" role="main">
        <div id="cMain">
            <div id="mArticle">
                <div class="content_error">
                    <div class="inner_error">
                        <div class="error_tistory">
                            <h2 id="kakaoBody" class="screen_out">에러 ë©”세지</h2>
                            <strong class="tit_error  tit_error_type2">접근 ê¶Œí•œì´ ì—†ëŠ” <span class="br_line"><br></span>페이지입니다.</strong>
                            <p class="desc_error">궁금하신 ì‚¬í•­ì€ <a href="https://cs.daum.net/faq/173.html" class="link_txt">고객센터</a>로 ë¬¸ì˜í•´ ì£¼ì‹œê¸° ë°”랍니다.</p>
                            <div class="wrap_btn"><a class="btn_basic" href="javascript:window.history.back();">이전화면</a></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <hr class="hide">
    <div id="kakaoFoot" class="footer_comm">
        <div class="inner_foot">
            <p class="desc_footer2">
                <strong class="txt_flogo">TISTORY</strong>
            </p>
        </div>
    </div>
</div>
</body>
</html>
cs

여기 보시면 곳곳에 글자가 깨진 것을 볼 수 있습니다. 이런 부분 때문에 text 대신에 content를 사용하는 것도 한가지 방법이 됩니다. 

b'<!doctype html>\n<html lang="ko">\n<head>\n    <title>TISTORY</title>\n    <meta charset="utf-8">\n    <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, width=device-width">\n    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/font.css">\n    <link rel="stylesheet" type="text/css" href="//t1.daumcdn.net/tistory_admin/www/style/top/error_20190814.css">\n</head>\n<body>\n<div id="kakaoIndex">\n    <a href="#kakaoBody">\xeb\xb3\xb8\xeb\xac\xb8 \xeb\xb0\x94\xeb\xa1\x9c\xea\xb0\x80\xea\xb8\xb0</a>\n    <a href="#kakaoGnb">\xeb\xa9\x94\xeb\x89\xb4 \xeb\xb0\x94\xeb\xa1\x9c\xea\xb0\x80\xea\xb8\xb0</a>\n</div>\n<div id="kakaoWrap" class="tistory_type3">\n    <div id="kakaoContent" role="main">\n        <div id="cMain">\n            <div id="mArticle">\n                <div class="content_error">\n                    <div class="inner_error">\n                        <div class="error_tistory">\n                            <h2 id="kakaoBody" class="screen_out">\xec\x97\x90\xeb\x9f\xac \xeb\xa9\x94\xec\x84\xb8\xec\xa7\x80</h2>\n                            <strong class="tit_error  tit_error_type2">\xec\xa0\x91\xea\xb7\xbc \xea\xb6\x8c\xed\x95\x9c\xec\x9d\xb4 \xec\x97\x86\xeb\x8a\x94 <span class="br_line"><br></span>\xed\x8e\x98\xec\x9d\xb4\xec\xa7\x80\xec\x9e\x85\xeb\x8b\x88\xeb\x8b\xa4.</strong>\n                           
\xea\xb6\x81\xea\xb8\x88\xed\x95\x98\xec\x8b\xa0 \xec\x82\xac\xed\x95\xad\xec\x9d\x80 \xea\xb3\xa0\xea\xb0\x9d\xec\x84\xbc\xed\x84\xb0\xeb\xa1\x9c \xeb\xac\xb8\xec\x9d\x98\xed\x95\xb4 \xec\xa3\xbc\xec\x8b\x9c\xea\xb8\xb0 \xeb\xb0\x94\xeb\x9e\x8d\xeb\x8b\x88\xeb\x8b\xa4.
 
\n                            <div class="wrap_btn"><a class="btn_basic" href="javascript:window.history.back();">\xec\x9d\xb4\xec\xa0\x84\xed\x99\x94\xeb\xa9\xb4</a></div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <hr class="hide">\n    <div id="kakaoFoot" class="footer_comm">\n        <div class="inner_foot">\n            <p class="desc_footer2">\n                <strong class="txt_flogo">TISTORY</strong>\n            </p>\n        </div>\n    </div>\n</div>\n</body>\n</html>\n'
cs


보시는 바와 같이 몇가지 다르긴 하지만, 안의 데이터를 바이너리 형태로 받아옵니다. 이부분을 통해서 원하시는 데이터를 파싱해서 사용이 가능합니다. 

 

물론 위의 데이터를 다음과 같은 형태로 decode해서 사용하셔야 하는 번거로움은 존재합니다. 

>>>b'\xec\x95\x88\xeb\x85\x95'.decode()
'안녕'

오늘은 Python[파이썬 웹크롤러] 03-WebCrawler 사이트의 내용(Html) 읽어오기 라는 주제로 웹사이트의 데이터를 가져오는 방법에 대해서 살펴봤습니다. 혹시 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다. 

반응형
Comments