네이버 최신기사 퍼오기 (HTML 스크랩핑) - PHP5
작성자 : 김영철
등록날짜 : 2009.01.14 22:59
실행 경로 : 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;
?>
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;
?>
"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기, 각종 광고, 영업, 판매, 제안서, 전단지 반응율 3배×10배 이상 높이는 마법의 8단계 공식" |
☞자세히보기 |
|
|