강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

네이버 최신기사 퍼오기 (HTML 스크랩핑) - PHP5
작성자 : 13 김영철
등록날짜 : 2009.01.14 22:59
3,107
실행 경로 : http://rootman.adbank.co.kr/ss/naver_scrap.php


DOMXPath등을 사용할 수 있는 PHP5에서 테스트 하셔야 됩니다.

네이버 야구 뉴스 페이지(http://news.naver.com/sports/index.nhn?category=kbo&menu=news) 를 읽어와서 변칙적으로 뉴스제목과 링크 URL을 가져오는 팁입니다.

방법은 간단합니다.
DOMDocument Object 의 loadHTMLFIle() 메소를를 이용해서 뉴스 URL의 HTML을 읽어옵니다. 읽어온 HTML 소스를 XML 문서인양 XPATH(DOM Xpath)를 이용해서 DOM Tree를 만든후 뉴스제목과 뉴스링크URL이 들어있는 PATH에 접근하여 데이터를 추출하는 방법입니다.

하지만 긁어온 HTML 소스는 'well-formed' XML이 아니기 떄문에 domducment Object의 loadHTMLFile() 메소드를 들이대면 경고메시지가 껄쭉하게 나올겁니다. 그래서 '@' 처리를 했습니다.


네이버 야구뉴스 페이지(http://news.naver.com/sports/index.nhn?category=kbo&menu=news) 의 경우는 기사 제목부분이 다음과 같이 이루어져 있습니다.

<a href="NEWS-VIEW-URL" style="line-height:24px" class="p14 u b">[사진]공항에서 간단히 인터뷰하는 안정환</a>
<a href="NEWS-VIEW-URL" style="line-height:24px" class="p14 u b">멋지다, 태극전사들!</a>
.....
.....

이렇게 뉴스의 각 제목들이 쭉 루프를 돌면서 생성되었는데 주의깊게 봐야될 부분이 class="p14 u b" 부분입니다.
이 스타일시트 클래스는 뉴스 문서에서 뉴스 제목을 표시할때만 사용되어 지는거란걸 알수 있을겁니다.
그래서 xpath->query("//a[@class='p14 u b']") 라는 쿼리로 뉴스의 제목을 링크하고 있는
<a src="URL">제목<a> 만을 추출해 낼수 있습니다.

PHP소스만 아래에 옮겨놨습니다.
Client 소스는 최근 5일간의 날짜를 선택할수 있게 하는 부분말고는 전부 클라이언트 스크립트이기 때문에 소스보기를 이용해서 직접 보시면 될겁니다.



네이버 야구 뉴스뿐만 아니라 속보등 거의 모든 뉴스를 스크랩해 올수 있습니다.
이같은 방법으로 다른 사이트의 공개된 게시물도 쉽게 가져오실수 있을거라 생각됩니다.


// 해당날짜의 야구뉴스 URL에서 뉴스 제목과 링크URL을 뽑아와서 "링크 | 제목" 형식으로
// 만든후 호출한곳에 리턴해 주는 역할을 합니다.
<?
header("Content-type: text/html; charset=utf-8");

$dom = new domdocument;

$url = 'http://news.naver.com/sports/index.nhn?category=kbo&menu=news&date=' . $_POST['date'];
$url_dump = parse_url($url);
$view_url = $url_dump['scheme'] . '://' . $url_dump['host'] . $url_dump['path'];

$total_row = 0;
for($i=1; $i<=10; $i++) {
    $target_url = $url .'&page=' . $i;

    @$dom->loadHTMLFile($target_url);
    $xpath = new domxpath($dom);
    $xNodes = $xpath->query("//a[@class='p14 u b']");

    $scraping_num = 0;
    foreach ($xNodes as $xNode)    {
        $sLinktext = @$xNode->nodeValue;
        $sLinkurl = $xNode->getAttribute('href');
        if ($sLinktext != '' && $sLinkurl != '') {
            echo $view_url . $sLinkurl . '|' . $sLinktext;
            echo "\n";
            $scraping_num++;
            $total_row++;
        }
    }
    if($scraping_num == 0) break;
}

echo "\n" . $total_row;
?>

출처 : Tong - ddakzzi님의 PHP통

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
2895 Mysql 백업 하기 13 김영철 01.29 3130
2894 UTF8 을 사용하기 위한 APM 설정 13 김영철 01.29 3128
2893 [CSS]글씨 크기-줄 간격 조절해서 보기 좋은 문서 만들기 99 단국강토 02.05 3126
2892 강제로 404 에러내기 13 김영철 01.13 3126
2891 :: Oracle rownum() 구현하기 13 김영철 01.24 3125
2890 [okjsp펌] mysql 스키마 백업 13 김영철 01.29 3123
2889 MSSQL Server DBA 가이드-5 M 최고의하루 12.26 3122
2888 Windows Server 2003 완벽 재설치 M 최고의하루 12.19 3118
2887 :: 엑셀 워크시트를 연결된 서버로 만들기 13 김영철 01.24 3117
2886 MSSQL 백업복구 13 김영철 01.24 3116
2885 Rewrite 99 단국강토 01.08 3115
2884 동영상 그림크기조절 99 단국강토 12.30 3113
2883 폼요소 - 라디오 버튼(radio button) M 최고의하루 12.19 3111
2882 PC에 남겨진 개인정보 제거하기 M 최고의하루 01.03 3110
2881 인터넷 동영상 저장하기 - 넷트랜스포터 사용 - M 최고의하루 01.12 3110
2880 rsync (remote sync daemon) UNIX 서버간 원격 복사 13 김영철 01.29 3109
열람중 네이버 최신기사 퍼오기 (HTML 스크랩핑) - PHP5 13 김영철 01.14 3108
2878 스케치 효과 10 액션쟁이 01.05 3107
2877 PHP에서 사용하는 오라클 함수 13 김영철 01.14 3103
2876 데이터베이스의 저장 프로시저를 자동으로 생성 M 최고의하루 12.24 3103
2875 특이한 스케치 효과 10 액션쟁이 12.31 3101
2874 컴퓨터 증상으로 보는 진단 노하우!! 17 vane 12.27 3095
2873 SQL : T-SQL문 : T-SQL(Transact-SQL)문법 13 김영철 01.23 3094
2872 왠만한 컴터 오류 해결~! M 최고의하루 01.02 3088
2871 A 태그 - 링크에 CSS 적용시키기 팁 +_+ 99 단국강토 01.30 3086
2870 [PHP] XML 문서파싱 - SAX 방식 , DOM 방식 13 김영철 01.13 3086
2869 php.ini register_globals 13 김영철 01.14 3085
2868 php기본함수 정리!! 13 김영철 01.13 3084
2867 [엑셀과 mysql의 데이터이동] 13 김영철 01.14 3084
2866 attachMovie한 무비클립의 _x, _y 좌표를 설정하려면 99 단국강토 02.05 3083
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취