my story

PHP로 실전 웹 크롤링 완전 정복: jQuery 연동까지! 본문

코딩

PHP로 실전 웹 크롤링 완전 정복: jQuery 연동까지!

무지개약속 2025. 6. 27. 19:14

웹에 있는 정보를 자동으로 가져와서 내 사이트나 앱에서 활용하고 싶었던 적 있나요?
PHP를 이용한 웹 크롤링은 생각보다 간단하면서도 강력합니다. 오늘은 PHP로 HTML을 크롤링하고, jQuery로 그 데이터를 웹에서 보여주는 전체 흐름을 실습해봅니다.


✅ 1. 왜 PHP 크롤링인가?

PHP는 웹서버에서 실행되는 스크립트 언어라서, 별도의 설치 없이도 쉽게 크롤링을 시작할 수 있어요. 특히 file_get_contents()나 cURL, DOMDocument 클래스를 활용하면 정적 웹페이지의 HTML 요소를 분석하고 추출할 수 있습니다.


🔧 2. 기본 크롤링 코드 예제

php
복사편집
<?php $url = 'https://news.naver.com/'; $html = file_get_contents($url); libxml_use_internal_errors(true); $doc = new DOMDocument(); $doc->loadHTML($html); $xpath = new DOMXPath($doc); $headlines = $xpath->query('//a[contains(@class, "cluster_text_headline")]'); $result = []; foreach ($headlines as $node) { $result[] = trim($node->nodeValue); } echo json_encode($result, JSON_UNESCAPED_UNICODE); ?>

이 스크립트는 네이버 뉴스에서 주요 헤드라인을 크롤링해 JSON 형태로 출력합니다.
여기서 핵심은 DOMXPath를 이용한 정밀한 HTML 요소 선택입니다.


🖥️ 3. jQuery로 프론트에서 데이터 표시

PHP에서 출력된 데이터를 jQuery Ajax로 받아서 웹에 출력해볼까요?

html
복사편집
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>뉴스 헤드라인</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <h2>📢 오늘의 헤드라인</h2> <ul id="news-list"></ul> <script> $(document).ready(function(){ $.ajax({ url: 'crawler.php', method: 'GET', dataType: 'json', success: function(data){ $.each(data, function(i, headline){ $('#news-list').append('<li>' + headline + '</li>'); }); }, error: function(){ $('#news-list').append('<li>데이터를 불러오는 데 실패했습니다.</li>'); } }); }); </script> </body> </html>

위 코드는 crawler.php에서 가져온 JSON 데이터를 리스트로 출력합니다.
크롤링과 프론트엔드 연동까지 한 번에 끝!


⚠️ 4. 주의할 점

  • 사이트 구조 변경 시 크롤링 코드도 함께 수정해야 합니다.
  • robots.txt 또는 서비스 이용약관을 확인해, 해당 사이트의 크롤링 정책을 준수하세요.
  • 빈번한 요청은 서버 차단을 유발할 수 있어, 캐시 저장 or 일정 간격 요청을 고려하세요.

🚀 5. 확장 아이디어

  • 크롤링 결과를 DB(MySQL 등)에 저장해 이력 관리
  • Telegram/Slack 알림 연동
  • 크론탭으로 주기적 실행 (자동 뉴스봇)

✍️ 마무리하며

PHP와 jQuery만으로도 이렇게 실전형 뉴스 크롤러를 만들 수 있습니다.
직접 해보면 생각보다 간단하면서도 강력해요. 오늘 배운 코드를 조금만 바꾸면, 블로그 제목, 환율 정보, 날씨 등 다양한 정보로 확장도 가능하니, 지금 바로 실습해보세요!

Comments