ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • PHP simple_html_dom을 이용한 크롤링
    개발 2019. 1. 22. 01:02
    반응형





    PHP의 라이브러리 사용하여 크롤링을 해보도록 하겠습니다. PHP의 크롤링을 위한 라이브러리는 두가지가 잘 알려져 있습니다.


    하나는 Snoopy이고 다른 하나는 지금부터 사용해 볼 simple_html_dom parser가 있습니다.


    라이브러리는 https://sourceforge.net/projects/simplehtmldom/에서 다운로드 받으시면 됩니다.


    기본적인 메뉴얼은 http://simplehtmldom.sourceforge.net/manual.htm를 이용해주시면 조금 더 쉽게 접근하실 수 있습니다.


    우선 가장먼저 다운받은 파일을 지금 해볼 예제와 같은 폴더에 넣어주시면 됩니다.



    위와 같이 작성후 웹에서 실행시켜주면 다음 해외축구 페이지가 실행 되는것을 확인 하실 수 있습니다.


    그렇다면 이제는 전체의 페이지가 아닌 페이지에서 원하는 부분을 가져오는 실습을 해보겠습니다.


    이제 해외축구란의 최신뉴스를 가져와보드록 하겠습니다.



    위의 이미지에서 보시면 스포츠란에서 소스에서 각 기사에 해당하는 소스에 class를 이용하여 크롤링을 해보겠습니다.



    이때 simple_html_dom의 find 기능을 이용하시면 됩니다.


    find를 이용하여 a태그 중 link_txt의 클래스만을 찾아서 a에 저장시킨 후 하나씩 b로 출력시키면 되겠습니다.



    하지만 위와 같이 출력을 하게되면 링크가 덧씌워진 형태로 같이 출력될 뿐만아니라 최신뉴스가 아닌 주요뉴스까지 출력되는 결과가 나왔습니다.


    링크를 뺀 제목과 최신뉴스만을 크롤링 하기위해서 코드를 조금 손봐줘야합니다.



    위 두 사진을 비교해보면 최신뉴스의 class와 주요뉴스의 class가 다른것을 확인할수 있습니다.


    최신뉴스만을 크롤링 하기 위해서는 find안의 내용을 div.news_newest로 수정을 해줍니다.



    만약 div.news_newest만 넣게 되면 div태그 안의 모든 글자를 크롤링 해오기 때문에 뉴스의 제목만 가져오기 위해서는 뉴스의 제목이 있는 div의 하위의 a태그 내용만을 가져오기 위해서 div.news_newest a라고 작성해주시면 됩니다. 물론 a태그에서 내용과 class가 달라서 원하는 더 자세히 원하는 내용을 가져오고 싶으시다면 a.link_txt로 적어주시면 a태그중에 link_txt의 클래스의 내용만을 가져올 수 있습니다.


    그리고 echo $b로 출력하게되면 간혹 태그나 다른 원하지않는 내용들이 출력이 될수 있습니다. 이럴때는 글자만을 출력해주기 위해서 simple_html_dom의 기능중에 하나인 plaintext를 사용하게 되면 글자만을 가져올 수 있습니다.



    최종 실행을 했을 때 출력되는 결과입니다.

    반응형

    댓글

Designed by Tistory.