Lấy dữ liệu giá cổ phiếu từ website bằng Python hay code VBA (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

thao nguyen01

Thành viên thường trực
Tham gia
8/12/19
Bài viết
252
Được thích
33
Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
 
Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
Có nhiều video hoặc trang web hướng dẫn rất chi tiết món này rồi mà, bạn chịu khó xem và làm theo. Các thành viên có giúp bạn thì cũng làm vậy thôi.
 
Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
Hồi trước mình cũng viết code VBA cho một bạn ở trên này cũng y chang trường hợp này, mà không lưu lại.
 
Thử mã sau:
Mã:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time
service = Service(executable_path=r'C:\Users\XTN84\Downloads\chromedriver-win64\chromedriver.exe')  # Thay thế đường dẫn này bằng đường dẫn tới chromedriver của bạn
driver = webdriver.Chrome(service=service)
url = "https://s.cafef.vn/lich-su-giao-dich-vnindex-1.chn"
driver.get(url)
try:
    WebDriverWait(driver, 30).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "table tr"))
    )
    data = []
    rows = driver.find_elements(By.CSS_SELECTOR, "table tr")
    for row in rows:
        cols = row.find_elements(By.TAG_NAME, "td")
        if len(cols) > 1:
            data.append([col.text for col in cols])
    df = pd.DataFrame(data)
    df.to_excel("vnindex_data.xlsx", index=False, header=False)
    print("Dữ liệu đã được xuất ra tệp vnindex_data.xlsx")
finally:
    driver.quit()
 
Thử mã sau:
Mã:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import time
service = Service(executable_path=r'C:\Users\XTN84\Downloads\chromedriver-win64\chromedriver.exe')  # Thay thế đường dẫn này bằng đường dẫn tới chromedriver của bạn
driver = webdriver.Chrome(service=service)
url = "https://s.cafef.vn/lich-su-giao-dich-vnindex-1.chn"
driver.get(url)
try:
    WebDriverWait(driver, 30).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, "table tr"))
    )
    data = []
    rows = driver.find_elements(By.CSS_SELECTOR, "table tr")
    for row in rows:
        cols = row.find_elements(By.TAG_NAME, "td")
        if len(cols) > 1:
            data.append([col.text for col in cols])
    df = pd.DataFrame(data)
    df.to_excel("vnindex_data.xlsx", index=False, header=False)
    print("Dữ liệu đã được xuất ra tệp vnindex_data.xlsx")
finally:
    driver.quit()
Dạ. Em cảm ơn anh. Em có làm thử nhưng cứ báo lỗi. Anh cho em hỏi là trước khi mình chạy code trên mình có cài đặt hay thêm câu lệnh gì k ạ?
 
Code mấy cái dữ liệu này ngoài biết chút VBA, còn phải hiểu nghiệp vụ bên chứng khoán nữa.
 
Mình không rành Python cho lắm, cho nên viết thử PowerShell script xem sao. PowerShell được cái tiện lợi, được cài sẵn theo Windows.
Đầu tiên bạn lưu lại script dưới đây với phần mở rộng là ".psm1":
Mã:
function Get-PriceHistory {
    param(
        [string]$Symbol,
        [string]$StartDate,
        [string]$EndDate,
        [int]$PageIndex = 1,
        [int]$PageSize = 20,
        [string]$Destination
    )
    if (Test-Path $Destination) {
        [string]$Uri = "https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=$($Symbol)&StartDate=$($StartDate)&EndDate=$($EndDate)&PageIndex=$($PageIndex)&PageSize=$($PageSize)"
        [PsCustomObject]$Response = Invoke-RestMethod -Uri $Uri -Method Get -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0" -Headers @{
            Referer = "https://s.cafef.vn/"
        }
        if ($Response) {
            $Result = @()
            $Response.Data.Data | ForEach-Object {
                $Result += New-Object -TypeName psobject -Property @{
                    "Ngày" = $_.Ngay
                    "Giá cao nhất" = $_.GiaCaoNhat
                    "Giá điều chỉnh" = $_.GiaDieuChinh
                    "Giá đóng cửa" = $_.GiaDongCua
                    "Giá mở cửa" = $_.GiaMoCua
                    "Giá thấp nhất" = $_.GiaThapNhat
                    "Giá trị khớp lệnh" = $_.GiaTriKhopLenh
                    "Giá trị thỏa thuận" = $_.GtThoaThuan
                    "Khối lượng thỏa thuận" = $_.KLThoaThuan
                    "Khối lượng khớp lệnh" = $_.KhoiLuongKhopLenh
                    "Thay đổi" = $_.ThayDoi
                }
            }
            [string]$CsvFile = ($Destination + "\PriceHistory-$($Symbol)-$(Get-Date -Format "dd-MM-yyyy hh-mm-ss").csv")
            $Result | Export-Csv -Path $CsvFile -NoTypeInformation -Append -Encoding utf8BOM
            Write-Host "Đã xuất thông tin ra đường dẫn $($CsvFile)"
        }
        else {
            Write-Host "Không thể lấy thông tin."
        }
    }
    else {
        Write-Error "The destination path $($Destination) does not exist or is invalid."
    }
}
Export-ModuleMember -Function Get-PriceHistory
Sau đó, mở PowerShell và gõ tên đường dẫn của script vừa lưu lại để nhập module vào PowerShell. (Sau này không cần lập lại bước này nữa).
1725507784507.png
Sau đó, bạn có thể sử dụng module vừa nhập với cú pháp sau:
Mã:
Import-Module "đường dẫn module"
Get-PriceHistory -Symbol "tên symbol" -Destination "Đường dẫn xuất ra tập tin csv" -PageSize "Số lượng kết quả tối đa" -StartDate "Ngày bắt đầu" -EndDate "Ngày kết thúc"
1725507994359.png
1725508027523.png
 
Mình không rành Python cho lắm, cho nên viết thử PowerShell script xem sao. PowerShell được cái tiện lợi, được cài sẵn theo Windows.
Đầu tiên bạn lưu lại script dưới đây với phần mở rộng là ".psm1":
Mã:
function Get-PriceHistory {
    param(
        [string]$Symbol,
        [string]$StartDate,
        [string]$EndDate,
        [int]$PageIndex = 1,
        [int]$PageSize = 20,
        [string]$Destination
    )
    if (Test-Path $Destination) {
        [string]$Uri = "https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=$($Symbol)&StartDate=$($StartDate)&EndDate=$($EndDate)&PageIndex=$($PageIndex)&PageSize=$($PageSize)"
        [PsCustomObject]$Response = Invoke-RestMethod -Uri $Uri -Method Get -UserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0" -Headers @{
            Referer = "https://s.cafef.vn/"
        }
        if ($Response) {
            $Result = @()
            $Response.Data.Data | ForEach-Object {
                $Result += New-Object -TypeName psobject -Property @{
                    "Ngày" = $_.Ngay
                    "Giá cao nhất" = $_.GiaCaoNhat
                    "Giá điều chỉnh" = $_.GiaDieuChinh
                    "Giá đóng cửa" = $_.GiaDongCua
                    "Giá mở cửa" = $_.GiaMoCua
                    "Giá thấp nhất" = $_.GiaThapNhat
                    "Giá trị khớp lệnh" = $_.GiaTriKhopLenh
                    "Giá trị thỏa thuận" = $_.GtThoaThuan
                    "Khối lượng thỏa thuận" = $_.KLThoaThuan
                    "Khối lượng khớp lệnh" = $_.KhoiLuongKhopLenh
                    "Thay đổi" = $_.ThayDoi
                }
            }
            [string]$CsvFile = ($Destination + "\PriceHistory-$($Symbol)-$(Get-Date -Format "dd-MM-yyyy hh-mm-ss").csv")
            $Result | Export-Csv -Path $CsvFile -NoTypeInformation -Append -Encoding utf8BOM
            Write-Host "Đã xuất thông tin ra đường dẫn $($CsvFile)"
        }
        else {
            Write-Host "Không thể lấy thông tin."
        }
    }
    else {
        Write-Error "The destination path $($Destination) does not exist or is invalid."
    }
}
Export-ModuleMember -Function Get-PriceHistory
Sau đó, mở PowerShell và gõ tên đường dẫn của script vừa lưu lại để nhập module vào PowerShell. (Sau này không cần lập lại bước này nữa).
View attachment 303694
Sau đó, bạn có thể sử dụng module vừa nhập với cú pháp sau:
Mã:
Import-Module "đường dẫn module"
Get-PriceHistory -Symbol "tên symbol" -Destination "Đường dẫn xuất ra tập tin csv" -PageSize "Số lượng kết quả tối đa" -StartDate "Ngày bắt đầu" -EndDate "Ngày kết thúc"
View attachment 303695
View attachment 303696
Dạ. Để em làm thử ạ. Em cảm ơn anh
 
Gửi bạn tham khảo, lấy dữ liệu của vnindex.
Nhập ngày bắt đầu tại ô B1, ngày kết thúc tại ô B2
Bấm get để lấy dữ liệu về excel.
 

File đính kèm

Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
Bạn có thể vô trang này tải data về và sử dụng nhé! https://s.cafef.vn/du-lieu-download.chn#data
 
bài này viết hai hàm

1/ Hàm lấy dữ liệu trả Về JSON
2/ hàm chuyển JSON thành Array xong gán lên Sheet

chỉ cần 2 mục trên là xong .. vì Tôi đang tập viết JSON trên Delphi do cái thớt bên kai gợi ý Google Sheet nên tiện tay thử chơi và gợi ý cho vậy

đơn giản và dể sử dụng ngay trên Excel
 
Dùng Power Query cho nó đơn giản:
Mã:
let
    Source = List.Transform({1..293}, each Json.Document(Web.Contents("https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=VCB&PageIndex=" & Number.ToText(_)& "&PageSize=20"))[Data][Data]),
    DataTables = List.Transform(Source, each Table.ExpandRecordColumn(Table.FromList(_, Splitter.SplitByNothing(), {"Record"}), "Record", {"Ngay", "GiaDieuChinh", "GiaDongCua", "ThayDoi", "KhoiLuongKhopLenh", "GiaTriKhopLenh", "KLThoaThuan", "GtThoaThuan", "GiaMoCua", "GiaCaoNhat", "GiaThapNhat"})),
    CombinedData = Table.Combine(DataTables)
in
    CombinedData
Lấy mã nào thì sửa chỗ VCB, cần lấy nhiều thì tạo list, cần lấy khoảng thời gian thì tạo startdate và enddate
 
Dùng Power Query cho nó đơn giản:
Mã:
let
    Source = List.Transform({1..293}, each Json.Document(Web.Contents("https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=VCB&PageIndex=" & Number.ToText(_)& "&PageSize=20"))[Data][Data]),
    DataTables = List.Transform(Source, each Table.ExpandRecordColumn(Table.FromList(_, Splitter.SplitByNothing(), {"Record"}), "Record", {"Ngay", "GiaDieuChinh", "GiaDongCua", "ThayDoi", "KhoiLuongKhopLenh", "GiaTriKhopLenh", "KLThoaThuan", "GtThoaThuan", "GiaMoCua", "GiaCaoNhat", "GiaThapNhat"})),
    CombinedData = Table.Combine(DataTables)
in
    CombinedData
Lấy mã nào thì sửa chỗ VCB, cần lấy nhiều thì tạo list, cần lấy khoảng thời gian thì tạo startdate và enddate
Dạ, em cảm ơn anh nhiều ạ
 
1725846105579.png

Tiện tay chơi chơi vui thôi

Viết trên bất cứ công cụ nào không quan trong lắm .. mà quan trọng là tiện sử dụng và không lệ thuộc thư viện bắt buộc phải cài kèm theo là tốt

Thiết kế như mấy mục khoanh màu đỏ khi cần tạo sự kiện cho Sheet chỉ gõ cộp cộp xong Enter
 
View attachment 303777

Tiện tay chơi chơi vui thôi

Viết trên bất cứ công cụ nào không quan trong lắm .. mà quan trọng là tiện sử dụng và không lệ thuộc thư viện bắt buộc phải cài kèm theo là tốt

Thiết kế như mấy mục khoanh màu đỏ khi cần tạo sự kiện cho Sheet chỉ gõ cộp cộp xong Enter
Anh có hàm hay file excel anh đã thử, anh cho em xin với ạ.
 
Anh có hàm hay file excel anh đã thử, anh cho em xin với ạ.
Tôi tiện đang viết thư Viện GoogleSheet.dll nên tiện tay thêm hàm vào thôi

Nó là DLL viết hàm API chứ không phải Python hay VBA ... còn trên VBA chỉ khai báo vài tham số + sự kiện là dùng

Tôi không thích viết lấy dữ liệu Web lắm vì tôi biết máy chủ họ chỉ cần thay đổi cấu trúc API hay dữ liệu là mò vãi tè ra nên không đi sâu vào nó

làm chi cho nhọc xác ra ... biết chút chút khi cần sử dụng là đủ dùng .....................................:p:D

Nếu thích DLL như nói trên thì tôi úp cho còn không thì thôi
 
Tôi tiện đang viết thư Viện GoogleSheet.dll nên tiện tay thêm hàm vào thôi

Nó là DLL viết hàm API chứ không phải Python hay VBA ... còn trên VBA chỉ khai báo vài tham số + sự kiện là dùng

Tôi không thích viết lấy dữ liệu Web lắm vì tôi biết máy chủ họ chỉ cần thay đổi cấu trúc API hay dữ liệu là mò vãi tè ra nên không đi sâu vào nó

làm chi cho nhọc xác ra ... biết chút chút khi cần sử dụng là đủ dùng .....................................:p:D

Nếu thích DLL như nói trên thì tôi úp cho còn không thì thôi
Em không biết về DLL ạ. Em cảm ơn anh.
 
Em không biết về DLL ạ. Em cảm ơn anh.
ồ DLL không biết thì chỉ cần biết Copy file về xong biết gõ cộp cộp như nói trên xong Enter là ok rồi

còn lại không cần thiết quan tâm làm chi .. sau này kiến thức khá hơn chút tự khắc nhận ra thôi
 
Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
Bạn tham khảo thử, mình dùng VBA
 
Bạn tham khảo thử, mình dùng VBA
Em cảm ơn anh nhiều.
 
Dạ, anh cho em xin DLL với ạ.
BẠN HÃY THỬ HẾT các mã có sẳn trên VBA đi xem tình hình sao ... để tôi tinh chỉnh lại chút xem có gì úp sau

mấy code trên VBA sử dụng HTMLFile tôi mới thử lỗi trên Windows 11 ... còn tại sao thì tôi cũng ko quan tâm lắm

1725850102596.png
 
Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
Thêm một giải pháp cho bạn, nếu bạn đang sử dụng Microsoft 365 bản doanh nghiệp (đã kích hoạt Office Scripts) hoặc bản khách hàng thông thường (Home hoặc Personal và đã tham gia chương trình xem trước Insider):
JavaScript:
async function main(workbook: ExcelScript.Workbook) {
    const sheetName = "CafeF-PriceHistory";
    let sheet = workbook.getWorksheet(sheetName);
    if (!sheet) {
        sheet = workbook.addWorksheet(sheetName);
    }
    const result = await getPriceHistory("VNINDEX", "8/1/2024", "8/31/2024", 500);
    const range = sheet.getRangeByIndexes(0, 0, result.length, 11);
    range.setValues(result);
    sheet.getRange("A1:K1").getFormat().getFont().setBold(true);
}

async function getPriceHistory(symbol: string, StartDate: string, EndDate: string, PageSize = 20): Promise<(string|number|boolean)[][]> {
    let uri = `https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=${symbol}&StartDate=${StartDate}&EndDate=${EndDate}&PageIndex=1&PageSize=${PageSize}`;
    const response = await fetch(uri, {
        headers: {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
            "Referer": "https://s.cafef.vn/"
        }
    });
    if (response.ok) {
        const result: (string|number|boolean)[][] = [];
        result.push(["Giá cao nhất", "Giá điều chỉnh", "Giá đóng cửa", "Giá mở cửa", "Giá thấp nhất", "Giá trị khớp lệnh", "Giá trị thỏa thuận", "Khối lượng thỏa thuận", "Khối lượng khớp lệnh", "Ngày", "Thay đổi"]);
        const json: PriceHistoryResponse = await response.json();
        for (const item of json.Data.Data) {
            const itemArray: (string|number|boolean)[] = [item.GiaCaoNhat, item.GiaDieuChinh, item.GiaDongCua, item.GiaMoCua, item.GiaThapNhat, item.GiaTriKhopLenh, item.GtThoaThuan, item.KLThoaThuan, item.KhoiLuongKhopLenh, item.Ngay, item.ThayDoi];
            result.push(itemArray);
        }
        return result;
    }
}

interface PriceHistoryResponse {
    Data: PriceHistoryData,
    Message: string,
    Success: boolean
}
interface PriceHistoryData {
    Data: Array<PriceHistoryItem>,
    TotalCount: number
}
interface PriceHistoryItem {
    GiaCaoNhat: number,
    GiaDieuChinh: number,
    GiaDongCua: number,
    GiaMoCua: number,
    GiaThapNhat: number,
    GiaTriKhopLenh: number,
    GtThoaThuan: number,
    KLThoaThuan: number,
    KhoiLuongKhopLenh: number,
    Ngay: string,
    ThayDoi: string
}
1725854872276.png
 
Thêm một giải pháp cho bạn, nếu bạn đang sử dụng Microsoft 365 bản doanh nghiệp (đã kích hoạt Office Scripts) hoặc bản khách hàng thông thường (Home hoặc Personal và đã tham gia chương trình xem trước Insider):
JavaScript:
async function main(workbook: ExcelScript.Workbook) {
    const sheetName = "CafeF-PriceHistory";
    let sheet = workbook.getWorksheet(sheetName);
    if (!sheet) {
        sheet = workbook.addWorksheet(sheetName);
    }
    const result = await getPriceHistory("VNINDEX", "8/1/2024", "8/31/2024", 500);
    const range = sheet.getRangeByIndexes(0, 0, result.length, 11);
    range.setValues(result);
    sheet.getRange("A1:K1").getFormat().getFont().setBold(true);
}

async function getPriceHistory(symbol: string, StartDate: string, EndDate: string, PageSize = 20): Promise<(string|number|boolean)[][]> {
    let uri = `https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=${symbol}&StartDate=${StartDate}&EndDate=${EndDate}&PageIndex=1&PageSize=${PageSize}`;
    const response = await fetch(uri, {
        headers: {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0",
            "Referer": "https://s.cafef.vn/"
        }
    });
    if (response.ok) {
        const result: (string|number|boolean)[][] = [];
        result.push(["Giá cao nhất", "Giá điều chỉnh", "Giá đóng cửa", "Giá mở cửa", "Giá thấp nhất", "Giá trị khớp lệnh", "Giá trị thỏa thuận", "Khối lượng thỏa thuận", "Khối lượng khớp lệnh", "Ngày", "Thay đổi"]);
        const json: PriceHistoryResponse = await response.json();
        for (const item of json.Data.Data) {
            const itemArray: (string|number|boolean)[] = [item.GiaCaoNhat, item.GiaDieuChinh, item.GiaDongCua, item.GiaMoCua, item.GiaThapNhat, item.GiaTriKhopLenh, item.GtThoaThuan, item.KLThoaThuan, item.KhoiLuongKhopLenh, item.Ngay, item.ThayDoi];
            result.push(itemArray);
        }
        return result;
    }
}

interface PriceHistoryResponse {
    Data: PriceHistoryData,
    Message: string,
    Success: boolean
}
interface PriceHistoryData {
    Data: Array<PriceHistoryItem>,
    TotalCount: number
}
interface PriceHistoryItem {
    GiaCaoNhat: number,
    GiaDieuChinh: number,
    GiaDongCua: number,
    GiaMoCua: number,
    GiaThapNhat: number,
    GiaTriKhopLenh: number,
    GtThoaThuan: number,
    KLThoaThuan: number,
    KhoiLuongKhopLenh: number,
    Ngay: string,
    ThayDoi: string
}
View attachment 303790
Dạ. Em cảm ơn anh.
 
dữ liệu JSON chỉ là phổ biến cho Web chứ không hiệu xuất nhanh như các kiểu dữ liệu khác

Nhưng qua Thớt này vọc qua voc lại Tôi lại biết thêm cách xử lý dữ liệu JSON chạy đa luồng song song tại cùng một thời điểm ...
áp dụng sau này khi cần xử lý dữ liệu lớn :p


HTMLFile quá cũ rồi bỏ dần đi là vừa vì dữ liệu lớn là thua
 
Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
Có các phương án từ VBA, Power Query, Python, Delphi, PowerShell, Office Scripts thậm chí có cả Tool riêng mà bạn vẫn chưa chọn cho mình được phương án sao.
 
Có các phương án từ VBA, Power Query, Python, Delphi, PowerShell, Office Scripts thậm chí có cả Tool riêng mà bạn vẫn chưa chọn cho mình được phương án sao.
Dạ, em đang xem phương án của VBA và power query ạ.
Bài đã được tự động gộp:

Có các phương án từ VBA, Power Query, Python, Delphi, PowerShell, Office Scripts thậm chí có cả Tool riêng mà bạn vẫn chưa chọn cho mình được phương án sao.
Phương án Power Query em thấy đơn giản hơn các cách khác chút nhưng em thắc mắc #15 chỗ :
https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=VCB&PageIndex=" & Number.ToText(_)& "&PageSize=20
=>Anh tạo link này như thế nào ạ? Em copy và dán lên web thì giống như CSV, nó khác với link ban đầu em gửi ạ.
Anh có thể hướng dẫn giúp em:
- Nếu sau này em muốn thay đổi ở 1 Web khác thì em áp dụng như thế nào ạ? và cách để tạo link như trên giống anh ạ?
 
Lần chỉnh sửa cuối:
Dạ, em đang xem phương án của VBA và power query ạ.
Bài đã được tự động gộp:


Phương án Power Query em thấy đơn giản hơn các cách khác chút nhưng em thắc mắc #15 chỗ :
https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=VCB&PageIndex=" & Number.ToText(_)& "&PageSize=20
=>Anh tạo link này như thế nào ạ? Em copy và dán lên web thì giống như CSV, nó khác với link ban đầu em gửi ạ.
Anh có thể hướng dẫn giúp em:
- Nếu sau này em muốn thay đổi ở 1 Web khác thì em áp dụng như thế nào ạ? và cách để tạo link như trên giống anh ạ?
Thì bạn muốn lấy dữ liệu thì bạn vô link=>phải chuột chọn inspect=>Network=>Fetch/XHR=> tải lại trang=> nhìn vô bên Headers sẽ thấy:

Request URL:
Chỗ VNINDEX là mã công ty, Startdate và enddate là khoảng thời gian, Pageindex 1 trang chứa 20 dòng đó. Muốn lấy tất cả thì phải tinh chỉnh lại mã thôi
 
Thì bạn muốn lấy dữ liệu thì bạn vô link=>phải chuột chọn inspect=>Network=>Fetch/XHR=> tải lại trang=> nhìn vô bên Headers sẽ thấy:

Request URL:
Chỗ VNINDEX là mã công ty, Startdate và enddate là khoảng thời gian, Pageindex 1 trang chứa 20 dòng đó. Muốn lấy tất cả thì phải tinh chỉnh lại mã thôi
Dạ, em cảm ơn anh
 
Kính gửi anh/chị trên diễn đàn,
Em muốn lấy dữ liệu giá cổ phiếu trên website:

Anh/ chị hỗ trợ giúp em code Python hoặc VBA để lấy dữ liệu lịch sử giao dịch cổ phiếu giúp em ạ (Nếu có thể chọn thời gian lấy dữ liệu thì quá tốt ạ). Hiện tại khi em muốn lấy dữ liệu, em chỉ kết xuất dữ liệu được từng trang và tổng hợp thủ công lại ạ. Anh/chị xem giúp em ạ. Em cảm ơn nhiều ạ.
Tôi tách riêng ra chủ đề sau ... tham khảo xem sao nếu cần tôi sẻ hổ trợ trong khả năng có thể ?!

 
Thì bạn muốn lấy dữ liệu thì bạn vô link=>phải chuột chọn inspect=>Network=>Fetch/XHR=> tải lại trang=> nhìn vô bên Headers sẽ thấy:

Request URL:
Chỗ VNINDEX là mã công ty, Startdate và enddate là khoảng thời gian, Pageindex 1 trang chứa 20 dòng đó. Muốn lấy tất cả thì phải tinh chỉnh lại mã thôi
Gãi đúng chỗ ngứa cho dân không chuyên như mình. Mình đã thắc mắc cách tìm URL như này mấy năm nay nhưng giờ mới được giải đáp. Cảm ơn pro rất nhiều!
 

Bài viết mới nhất

Back
Top Bottom