• 쇼핑몰
  • 커뮤니티
  • 북마크

vb6.0/vba

[vb6.0/vba] [vba] 네이버 증권정보 크롤링(파싱)하기

하나를하더라도최선을
2020.02.27 02:14 209 0

본문



에서 제공하는 정보를 크롤링(파싱) 하고자 합니다.

a96e18e9facd6eb2195b10f3fe171150_1582737224_0953.png

해당 데이터를 보니 Table로 되어 있네요

a96e18e9facd6eb2195b10f3fe171150_1582737237_9291.png

아래처럼 데이터를 가져 오도록 코딩하였습니다.

Sub program1472_com()

Dim URL As String, P As Integer, T As String

Dim sht As Worksheet

Set sht = ActiveSheet '// 시트지정

sht.Cells.Clear '// 기존 데이터 모두 삭제

For P = 1 To 3 '// 1부터 3페이지

URL = "https://finance.naver.com/fund/fundDailyQuoteList.nhn?fundCd=KR5205AR8940&page=" & P

With CreateObject("WinHttp.WinHttpRequest.5.1")

.Open "GET", URL

.SetRequestHeader "Host", "finance.naver.com"

.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0"

.SetRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"

.SetRequestHeader "Accept-Language", "ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3"

.SetRequestHeader "Connection", "keep-alive"

.SetRequestHeader "Upgrade-Insecure-Requests", "1"

.SetRequestHeader "Cache-Control", "max-age=0"

.SetRequestHeader "TE", "Trailers"

.Send

.WaitForResponse: DoEvents

T = .ResponseText

End With

If P = 1 Then '// 첫번째 페이지만 해더정보 포함

T = Split(Split(T, "<table")(1), "</table")(0)

T = Join(Array("<table", T, "</table>"))

Else '// 두번째 페이지 부터는 데이터만

T = Split(Split(T, "<tbody>")(1), "</tbody>")(0)

T = Join(Array("<table><tbody>", T, "</tbody></table>"))

End If

With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

.SetText T '// 검색한 텍스트를

.PutInClipboard '// 클립보드에 넣음

End With

sht.Paste Destination:=sht.Cells(Rows.Count, "A").End(3)(2) '// 클립보드 내용을 셀에 뿌림

Next

sht.Activate '// 해당 시트로 이동해서

sht.Shapes.SelectAll '// 도형을 모두 선택하고

Selection.Delete '// 선택한 도형을 모두 삭제

End Sub


매크로 실행결과 아래처럼 잘 가지고 옵니다.


a96e18e9facd6eb2195b10f3fe171150_1582737250_7839.png



댓글목록 0

등록된 댓글이 없습니다.