ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 업무 자동화 코딩캠프 #02 Crawling
    업무 자동화 제주도 코딩캠프 2019. 2. 18. 20:59



    캠프 두번째 날은 Crawling 에 대해 배웠다.


    크게 두 가지의 라이브러리를 사용했다.





    #1. requests library 


    그 중 하나가 requests 였다.



    우선, 라이브러리를 설치하고 !!




    requests - python 에서 HTTP 요청을 보내는 라이브러리

    Lord SQL Injection 에서 Blind Injection 을 시도했을 때와 같은 라이브러리이다.




    캠프에서 받았던 자료를 통해 작성한 코드이다.

    paullab.co.kr 에 Get 방식으로 접근하여 그 내용을 test.html 에 저장하는 코드이다.

    utf-8 을 해주어야만 한글이 제대로 출력된다.

    예제에서는 utf-8 을 적용해주지 않았습니다.




    .text 외에도 header 내용을 볼 수 있는 response.headers

    HTTP status 를 확인할 수 있는 response.status_code

    정상적으로 접근했는지 확인할 수 있는 response.ok 등이 있다.







    #2. BeautifulSoup library 




    Requests 와 같이 활용되는 또 하나의 라이브러리는 BeautifulSoup 였다.




    BeautifulSoup - 세부적인 정보를 추출할 때 필요한 라이브러리




    Requests 을 통해 html 구조의 데이터를 단순하게 'str' 타입의 데이터로 받아오는 것은 가능했다. 하지만, Requests 만으로는 python 내부에서 'html' 의 구조를 이해하지 못한다. Python 이 이해하는 구조로 만들어 주기 위해서는 BeautifulSoup 가 필요하며, 이것이 BeautifulSoup 에서 제공하는 Parser 가 하는 역할이다.




    위의 예시처럼 str 자료형에서 <title>, <p> 와 같은 html 태그에 접근하기 위해 'html.parser' 를 적용해준 것을 볼 수 있다. 


    soup.title.name

    soup.title.parent.name


    와 같이 부모, 속성과 같은 세부적인 접근도 가능하다.





    soup.find_all('a')  > a 태그를 모두 가져온다. (list)

    soup.find(id="link3") > id 가 link3 인 태그를 모두 가져온다.

    soup.get_text() > 텍스트만 가져온다.

    soup.select() > '셀렉터' 를 이용하여 좀더 세부적인 접근이 가능하다.



    css 문법 중 하나인 셀렉터를 알면 특정 태그에 접근하기 쉽다. 

    css 안에서 id 와 class 를 지칭할 때, id 는 # 을 사용하고 class 는 . 을 사용한다는 점만 주목하면 된다.




    1 <a href='home.html'></a>


    2 <li class='beautiful'>

    3     <p id='text'>

    4         <a href = ''> </a>        // 가져올 라인

    5      </p>

    6 </li>




    다음과 같은 html 코드가 있을 때, <a> 로 접근한다면 가져올 정보 이외에도 1번 라인에 있는 정보도 가져오게 된다.


    ' > ' 를 통해서 찾는 조건들을 이을 수 있다


    조건1 > 조건2 > ... > 조건 n

    조건1 안에 조건2 안에 .... 조건 n 을 만족하는 tag


    위의 같은 코드에서 4번 줄에 접근하려면 결국


    class 가 beautiful 인 tag 안에 id 가 text 인 tag 안에 a 태그

    .beautiful > #text > a

    혹은

    li tag 안에 p tag 안에 a tag 와 같이 접근해야한다.

    li > p > a



    하지만, class 와 id 를 사용하는 방법이 더 세밀하기 때문에 태그로 접근하는 것보다 정확하다.





    #3. 실습 


    실습은 Pwnable.kr 에 있는 문제들의 이름을 나열하는 것으로 했다.








    짜잔!!






    댓글

Designed by Tistory.