728x90

네이버 증권 일별 시세를 PHP 로 크롤링하는 코드 예제이다.

 

<?php
error_reporting(0);
//*
ini_set("display_startup_errors"1);
ini_set("display_errors"1);
error_reporting(E_ALL);
// */
 
require_once $_SERVER['DOCUMENT_ROOT'].'/simple_html_dom.php';
 
$code = '039610';
$page = 1;
 
// 함수화할 영역으로 3페이지(1개월)부터 역순으로 DB 저장을 해야 최신 자료가 위로 저장된다.
$url = 'https://finance.naver.com/item/sise_day.naver?code=' . $code . '&page=' . $page;
 
// 웹페이지에서 HTML 데이터 가져오기
$ua = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36";
$options = [
    "http" => [
        "header" => "User-Agent: " . $ua
    ]
];
$context = stream_context_create($options);
$html = file_get_html($urlfalse$context);
 
if ($html) {
    $items = $html->find('.type2 tbody:nth-child(3) tr[onmouseover="mouseOver(this)"]');
 
    $stockDayTemp = [];
    foreach($items as $item) {
        $info = [];
        foreach($item->find('td'as $td) {
            $info[] = trim($td->plaintext);  // <td> 내부 텍스트를 추출하여 배열에 저장
        }
        //echo '<pre>';print_r($info);echo '</pre>';
        $sdate = preg_replace('/[^0-9\.]/'''$info[0]); // 날짜
        $closeM = preg_replace('/[^0-9]/'''$info[1]); // 종가
        $openM = preg_replace('/[^0-9]/'''$info[3]); // 시가
        $highM = preg_replace('/[^0-9]/'''$info[4]); // 고가
        $lowM = preg_replace('/[^0-9]/'''$info[5]); // 저가
        $volume = preg_replace('/[^0-9]/'''$info[6]); // 거래량
 
        $cv30 = floatval($closeM* 1.3// 상한가
        $cv60 = floatval($closeM* 1.6// 단기 투경 기준
        $cv100 = floatval($closeM* 2// 4주 투경 기준
 
        $stockDayTemp[] = [
            $code$sdate$closeM$openM$highM$lowM$volume$cv30$cv60$cv100
        ];
    
    }
 
    foreach (array_reverse($stockDayTempas $items) {
        echo '<pre>';print_r($items);echo '</pre>';
    }
 
}
?>

 

 

728x90
블로그 이미지

Link2Me

,