vb6.0/vba [vba] 네이버 증권정보 크롤링(파싱)하기
페이지 정보
본문
에서 제공하는 정보를 크롤링(파싱) 하고자 합니다.
해당 데이터를 보니 Table로 되어 있네요
아래처럼 데이터를 가져 오도록 코딩하였습니다.
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
매크로 실행결과 아래처럼 잘 가지고 옵니다.
- 이전글[vba] 필터처럼 검색한 데이터의 병합된 모든 행 숨기기 20.02.27
- 다음글[vb6.0/vba] CallByName - Application.Run 과는 다른 텍스트(String)로 프로시저 호출 20.02.26
댓글목록
등록된 댓글이 없습니다.