네이버 증권에서 52주 최고 주가를 가져오는 PHP 크롤링 코드를 구현하는 과정을 적어둔다.
준비물 : Firefox 브라우저
- 크롬브라우저로 했더니 selector 를 알려주는 결과로 원하는 결과를 얻을 수 없었다.
- 그래서 난 Firefox 브라우저를 활용하기로 했다.
1단계 : F12키를 눌러 소스보기 화면을 띄운다.
2단계 : 추적하는 아이콘을 눌러 검색하고자 하는 곳에 마우스로 가져간다.
3단계 : table class 가 rwidth 라는 걸 찾았다.
이제 두번째 tr의 selector 값을 찾는 과정이다.
찾은 결과는
.rwidth > tbody:nth-child(2) > tr:nth-child(2)
이다.
이걸 기준으로 PHP simpe_html_dom 라이브러리 기준의 코드를 구현하자.
$html->find('table.rwidth tbody:nth-child(2) tr',1)
tr:nth-child(2)는 2번째 tr 을 의미하므로 find 로 찾는 것은 0, 1 이므로 1을 선택하면 된다.
tr 하단 DOM 트리 구조에 th 와 td가 있다.
그러므로 find('td',0)
td 트리 하단에 em 이 2개 있다. 여기서 첫번째 이므로 최종적인 코드는 아래와 같다.
$html->find('table.rwidth tbody:nth-child(2) tr',1)->find('td',0)->find('em',0);
최종 코드는 아래와 같다.
<?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 = '036460';
$url = 'https://finance.naver.com/item/main.naver?code=' . $code;
$userAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0';
$options = [
'http' => [
'header' => 'User-Agent: ' . $userAgent
]
];
$context = stream_context_create($options);
$html = file_get_html($url, false, $context);
if ($html) {
// 52주 고가
$maxElement = $html->find('table.rwidth tbody:nth-child(2) tr',1)->find('td',0)->find('em',0);
$stock_52maxVal = preg_replace('/[^0-9]/', '', $maxElement->plaintext);
header('Content-Type: text/html; charset=utf-8');
echo $stock_52maxVal.'<br/>';
} else {
echo 'Failed to retrieve the data';
}
?>
|
'Web 크롤링 > PHP Crawling' 카테고리의 다른 글
네이버증권 일별 시세 크롤링 (0) | 2024.08.24 |
---|---|
네이버 증권 오늘의 종가 및 고가 크롤링 (0) | 2024.08.18 |
네이버 증권 최대주주 지분율 크롤링 (0) | 2024.08.17 |