-
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를 사용하게 되면 글자만을 가져올 수 있습니다.
최종 실행을 했을 때 출력되는 결과입니다.
반응형'개발' 카테고리의 다른 글
PHP에서 <?와 <?php의 차이 (0) 2019.02.27 웹사이트 https로만 접근되게 하는 방법 (0) 2019.02.20 PHP 문자 연결 (0) 2019.02.14 An error occurred while attempting to initialize the Borland Database Engine (1) 2019.02.14 PHP 개발환경 구축하기 (0) 2019.01.21 댓글