Web 크롤링/PHP Crawling

네이버증권 52주최고 주가 크롤링

Link2Me 2024. 8. 25. 13:46
728x90

네이버 증권에서 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($urlfalse$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';
    }
 
 
?>
 

 

 

 

 

728x90