Web 크롤링/PHP Crawling
네이버증권 일별 시세 크롤링
Link2Me
2024. 8. 24. 11:53
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($url, false, $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($stockDayTemp) as $items) {
echo '<pre>';print_r($items);echo '</pre>';
}
}
?>
|
728x90