Lấy dữ liệu cổ phiếu từ Website Cafef.vn về Excel

Liên hệ QC

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,500
Được thích
4,112
Giới tính
Nam
1/ ý tưởng xuất phát từ chủ đề sau


2/ Tôi đang viết thư viện GoogleSheets trên Delphi có sử dụng dữ liệu JSON nên nhân tiện thử dữ liệu Website của mục trên

3/ Viết riêng ra vài hàm chuyên cho xử lý dữ liệu của Website cafef.vn
xuất ra ba hàm API cơ bản sử dụng các thư viện thuần trên Delphi 12
Mã:
Declare PtrSafe Function GetDataJSONFromCafefVN Lib "GoogleSheets64.dll" _
            (ByVal Symbol As Variant, ByVal StartDate As Variant, _
            ByVal EndDate As Variant, ByVal PageIndex As LongPtr, _
            ByVal PageSize As LongPtr) As Variant
    Rem ##########
    Declare PtrSafe Function JSONToArray Lib "GoogleSheets64.dll" _
            (ByVal JsonString As Variant, _
            Optional ByRef IncludeHeaders As Boolean = True) As Variant
          
    Rem ########## ThreadCount = so Luong tuy chinh 2,4,6 hay 20 luong la so chan
    Declare PtrSafe Function JSONToArrayMultiThreaded Lib "GoogleSheets64.dll" _
            (ByVal JsonString As Variant, _
            Optional ByRef IncludeHeaders As Boolean = True, _
            Optional ByVal ThreadCount As LongPtr = 0) As Variant

1/ Hàm GetDataJSONFromCafefVN lấy tên theo trang Web để không nhầm lẫn sử dụng sai mục đích
lấy Web khác sẻ lỗi hàm trả về chuỗi JSON khi ta thử code sẻ thấy là

1725935153143.png

2/ Hàm JSONToArray chuyển mảng JSON của mục số 1 thành mảng gán lên Sheet của Excel ( Không sử dụng đa luồng )

3/ Hàm JSONToArrayMultiThreaded chuyển mảng JSON của mục số 1 thành mảng gán lên Sheet của Excel ( sử dụng đa luồng chạy song song )

hàm này tuỳ chỉnh tham số luồng chạy song song là 2,4,6,8 hay 20 luồng tuỳ theo cấu hình máy và là số chẳn

Tôi thử dữ liệu ít nó gần như nhau ... có lẻ sẻ có sự khác biệt khi chạy đa luồng cho dữ liệu lớn

Từ 3 hàm trên tuỳ chỉnh viết hàm phụ sử dụng cho sự kiện trên Sheet của VBA
Mã:
Sub ImportDataFrom_CafefVN(Symbol As Variant, _
                           StartDate As Variant, EndDate As Variant, _
                           PageIndex As Long, PageSize As Long, _
                           Sh As Worksheet)
    Rem ##########
    Dim JSONData As Variant
    Dim JSONToArr As Variant
    Dim startTime As Single
    Dim endTime As Single
    Dim elapsedTime As Single

    On Error GoTo ErrorHandler
    startTime = Timer

    Rem Goi hàm GetDataJSONFromCafefVN
    JSONData = GetDataJSONFromCafefVN(Symbol, StartDate, EndDate, PageIndex, PageSize)
  
    Rem 8 hay 10 là so luong tuy chinh khi su dung da luong song song
    JSONToArr = JSONToArrayMultiThreaded(JSONData, True, 8)         ' True = lay tieu de ; False = ko lay tieu de
  
    Rem ### Neu may cu yeu thi thay the da luong sang ham sau
    Rem JSONToArr = JSONToArray(JSONData, True)                     ' True = lay tieu de ; False = ko lay tieu de
  
    Debug.Print "Row " & UBound(JSONToArr, 1)
    Debug.Print "Cols " & UBound(JSONToArr, 2)
  
    Rem Kiem tra du lieu tra ve
    If IsEmpty(JSONToArr) Then
        MsgBox "Du lieu tra ve rong"
        Exit Sub
    End If
  
    Rem Gán ket qua lên Sheet (ví du tai ô A11)
    Sh.Range("A11").Resize(UBound(JSONToArr, 1), UBound(JSONToArr, 2)).Value = JSONToArr
  
    endTime = Timer
  
    Rem Tính thoi gian dã chay
    elapsedTime = endTime - startTime
  
    Rem Hien thi thoi gian dã chay trên StatusBar
    Application.StatusBar = "Elapsed Time: " & Format(elapsedTime, "0.000") & " seconds."
  
    Exit Sub
ErrorHandler:
    MsgBox "Ðã xay ra loi: " & Err.Description, vbCritical
End Sub

Hình ảnh sử dụng trên Sheet chỉ cần gõ các tham số mục khoanh màu đỏ và nhận kết quả trả về trên Sheet

1725935522304.png

Lưu ý:

1/ File sau chỉ áp dụng cho Website như mô tả trên nếu áp dụng cho Website khác là lỗi

2/ Hàm JSONToArrayMultiThreaded chuyển chuỗi JSON sử dụng cho Sheet thì tuỳ theo dữ liệu JSON của từng Web có thể sử dụng tốt hay lỗi vì dữ liệu JSON có rất nhiều loại
và hàm này chưa xử xử lý hết mọi loại JSON. nếu muốn sử dụng cho Web khác thử xem nếu chạy thì dùng còn không thì bỏ

3/ quá trình sử dụng mọi phát sinh lỗi nếu có vui lòng mô tả chi tiết nếu được tôi sẻ điều chỉnh code cho phù hợp

4/ hai DLL luôn đi kèm file Excel trong cùng thư mục sử dụng cho 32 và 64 bit ... nếu Copy vào thự mục của Windows thì viết lại code trong VBA và loại bỏ Module mod_LoadLibrary ra khỏi file Excel
 

File đính kèm

  • GetDataFrom_WebCafefVN.rar
    3.1 MB · Đọc: 21
Lần chỉnh sửa cuối:
hi anh, nếu xịn vầy thì anh anh xem có thể nâng tùy biến của các hàm dưới, mỗi lần viết dll thì có thể dùng và ứng dụng.

1. Hàm ImportDataFrom_CafefVN cho phép tùy biến:

+ Url địa chỉ chứa dữ liệu;
+ Phương pháp truyền (method) GET, POST, ...
+ PostData: tham số gửi về web;
+ cookie để mở rộng sau này
Thì trở thành GetDataJSONFromCafefVN(url As String, method As String, url As String, cookie As String, datasend As String)
Tất cả đều trả về .responseText (string) còn định dạng là JSON hay HTML thì sau đó xử lý sau
Sẽ ứng dụng được rộng rãi, không chỉ web này và còn các web khác.

2. Hàm xử lý chuỗi JSON

Hàm này thì cần cho tham số nhận từ dạng text, rồi cho phép phân tích (ParseJson), chỉ nhận về chuỗi Json là xong.
 
hi anh, nếu xịn vầy thì anh anh xem có thể nâng tùy biến của các hàm dưới, mỗi lần viết dll thì có thể dùng và ứng dụng.

1. Hàm ImportDataFrom_CafefVN cho phép tùy biến:

+ Url địa chỉ chứa dữ liệu;
+ Phương pháp truyền (method) GET, POST, ...
+ PostData: tham số gửi về web;
+ cookie để mở rộng sau này
Thì trở thành GetDataJSONFromCafefVN(url As String, method As String, url As String, cookie As String, datasend As String)
Tất cả đều trả về .responseText (string) còn định dạng là JSON hay HTML thì sau đó xử lý sau
Sẽ ứng dụng được rộng rãi, không chỉ web này và còn các web khác.

2. Hàm xử lý chuỗi JSON

Hàm này thì cần cho tham số nhận từ dạng text, rồi cho phép phân tích (ParseJson), chỉ nhận về chuỗi Json là xong.
Hôm lâu tôi có viết 3 hàm sau sử dụng Indy trong Delphi 12

Mã:
Declare PtrSafe Function HttpRequest Lib "WebServerInfo64.dll" _
                (ByRef URL As Variant, ByRef Method As Variant, _
                ByRef Data As Variant) As Variant
Rem ##########
Declare PtrSafe Function ExecuteHttpRequest Lib "WebServerInfo64.dll" _
                (ByRef URL As Variant, ByRef Method As Variant, _
                ByRef Data As Variant) As Variant
Rem ########## su dung luong de an toan hon
Declare PtrSafe Function ExecuteHttpRequestAsync Lib "WebServerInfo64.dll" _
                (ByRef URL As Variant, ByRef Method As Variant, _
                ByRef Data As Variant) As Variant

Ba hàm trên như nhau nhưng khác thuật toán và cách viết .. nó thay thế hoàn toàn sử dụng MSXML2.XMLHTTP, MSXML2.ServerXMLHTTP.6.0,WinHttp.WinHttpRequest.5.1 khi truyền tham số vào hàm

chỉ là hàm có sẳn trên Delphi tôi copy từ nguồn ra khai báo truyền tham số thuần vào và không can thiệp gì hết ... nếu thích tôi úp cho nhưng sau vài ngày chi đó

Thự viện trên có các hàm cho Google Sheet khi lấy dữ liệu trả về các phương thức thuộc tính của ADODB trên Excel như
CopyFromRecordset rs , rs.GetRows() và .... ai rảnh thử copy Code sau chạy thử

Lưu ý tôi xoá bớt ( Làm sai ) SheetId và APIKey rồi vì vậy muốn sử dụng phải tự tạo APIKey

Mã:
Declare PtrSafe Function GoogleSheetAsRecordset Lib "GoogleSheets64.dll" _
            (ByRef SheetId As Variant, _
             ByRef APIKey As Variant, _
             ByRef sheetName As Variant) As Variant
       
Sub ImportGoogleSheetData()
    Dim SheetId As String
    Dim APIKey As String
    Dim sheetName As String
    Dim rs As Object
    Dim ws As Worksheet
 
    ' Set your Google Sheet details
    SheetId = "1punDQ-pRaMsi5pj4ZrhNLFkOD3qkoo" ' ID c?a Google Sheet
    APIKey = "AIzaSyC-ZEXyJH-9BwlpL-KCTZlxJw" ' API Key c?a b?n
    sheetName = "Test" ' Tên c?a sheet
 
    ' Call the Delphi function
    Set rs = GoogleSheetAsRecordset(SheetId, APIKey, sheetName)
 
    ' S? d?ng rs nhu Recordset
'    Do While Not rs.EOF
'        Debug.Print rs.Fields(1).Value ''1 là cot 2
'        rs.MoveNext
'    Loop
 
    Cells.ClearContents
    ' Paste the data into the worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")  ' Change to your target sheet
    ws.Range("A1").CopyFromRecordset rs
 
    ' Cleanup
    rs.Close
    Set rs = Nothing
End Sub
Bài đã được tự động gộp:

các hàm dựng sẳn cho Google Sheet

Mã:
Declare PtrSafe Function ExtractSheetIdFromURL Lib "GoogleSheets64.dll" _
            (ByRef url As Variant) As Variant

Declare PtrSafe Function GoogleSheetJSONToArray Lib "GoogleSheets64.dll" _
            (ByRef response As Variant) As Variant

Declare PtrSafe Function ProcessJSONResponse Lib "GoogleSheets64.dll" _
            (ByRef response As Variant) As Variant

Declare PtrSafe Function GetGoogleSheetNames Lib "GoogleSheets64.dll" _
            (ByRef SheetId As Variant, ByRef APIKey As Variant) As Variant

Declare PtrSafe Function GoogleSheetAsRecordset Lib "GoogleSheets64.dll" _
            (ByRef SheetId As Variant, _
             ByRef APIKey As Variant, _
             ByRef sheetName As Variant) As Variant

Declare PtrSafe Function FilterGoogleSheetAsRecordset Lib "GoogleSheets64.dll" _
            (ByRef SheetId As Variant, _
             ByRef APIKey As Variant, _
             ByRef APIKey As Variant, _
             ByRef ColumnIndex As Variant, ByRef FilterValue As Variant) As Variant
                       
                       
Declare PtrSafe Function GoogleSheetsToJSON Lib "GoogleSheets64.dll" ( _
            ByVal SheetId As Variant, _
            ByVal APIKey As Variant, _
            ByVal sheetName As Variant) As Variant

ai cần sử dụng hàm nào tôi chỉ dẫn .. vì dự án cho Google Sheets còn viết tiếp nữa và có liên quan máy chủ WebServer của tôi đẩy dữ liệu lên Google Sheet chưa hoàn thiện và lỗi
 
Lần chỉnh sửa cuối:
cách lấy dữ liệu Google Sheet không sử dụng ADODB trên VBA .. Lưu ý tôi xoá sai SheetId và APIKey .. ai muốn sử dụng tự khai báo APIkey của Google Sheet xong sử dụng

Mã:
Sub TestGoogleSheetsToJSON()
    Dim SheetId As String
    Dim APIKey As String
    Dim sheetName As String
    Dim response As String
    Dim result As Variant
  
    SheetId = "1punDQ-pRauHri5pj4ZrhNLFkOD3qkoo" ' ID c?a Google Sheet
    sheetName = "Test" ' Tên c?a Sheet trong Google Sheet
    APIKey = "AIzaSyC-ZpL-KCTZlxJw" ' API Key c?a Google Sheets API
  
    ' G?i hàm API và luu k?t qu?
    response = GoogleSheetsToJSON(SheetId, APIKey, sheetName)
              
    ' Hi?n th? k?t qu?
    Debug.Print response
    result = GoogleSheetJSONToArray(response)
  
    Cells.ClearContents
    Range("A1").Resize(UBound(result, 1) + 1, UBound(result, 2) + 1).Value = result
End Sub

Cách tạo APIKey link sau nếu không thích thì Google một cái nó ra cả tấn xong thong thả dò đi làm quen từ từ _)()(-
 
hi anh, nếu xịn vầy thì anh anh xem có thể nâng tùy biến của các hàm dưới, mỗi lần viết dll thì có thể dùng và ứng dụng.

1. Hàm ImportDataFrom_CafefVN cho phép tùy biến:

+ Url địa chỉ chứa dữ liệu;
+ Phương pháp truyền (method) GET, POST, ...
+ PostData: tham số gửi về web;
+ cookie để mở rộng sau này
Thì trở thành GetDataJSONFromCafefVN(url As String, method As String, url As String, cookie As String, datasend As String)
Tất cả đều trả về .responseText (string) còn định dạng là JSON hay HTML thì sau đó xử lý sau
Sẽ ứng dụng được rộng rãi, không chỉ web này và còn các web khác.

2. Hàm xử lý chuỗi JSON

Hàm này thì cần cho tham số nhận từ dạng text, rồi cho phép phân tích (ParseJson), chỉ nhận về chuỗi Json là xong.
Nếu chịu khó phối họp cùng tôi test code và dò thì sẻ biến cái không thể thành có thể vì bên ta luôn có Em ChatGPT tuyệt đỉnh

3 Hàm tôi nói trên thiếu 3 tham số mới viết hàm mới có cấu trúc như sau ... xem sao nếu ưng tôi test kỹ xong úp

Mã:
Declare PtrSafe Function SendHttpRequest Lib "GoogleSheets64.dll" ( _
    ByVal method As Variant, _
    ByVal URL As Variant, _
    ByVal contentType As Variant, _
    ByVal accept As Variant, _
    ByVal userAgent As Variant, _
    ByVal dataToSend As Variant) As Variant
   
Sub GetDataFromGoogleSheet()
    Dim response As Variant
    Dim URL As String
    Dim method As String
    Dim contentType As String
    Dim accept As String
    Dim userAgent As String
    Dim dataToSend As Variant
   
    ' ID c?a b?ng tính
    Dim spreadsheetId As String
    spreadsheetId = "1-0nB16Fefr8cTbEV7Gj5VjcegL5GcfMIc4RP5C9Sn4w"

    ' Ðu?ng d?n URL d? l?y d? li?u CSV t? Google Sheets
    URL = "https://docs.google.com/spreadsheets/d/" & spreadsheetId & "/gviz/tq?tqx=out:csv"

    method = "GET"
    contentType = "text/csv"
    accept = "text/csv"
    userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
    dataToSend = Null  ' Không g?i d? li?u cho phuong th?c GET

    ' G?i hàm SendHttpRequest
    response = SendHttpRequest(method, URL, contentType, accept, userAgent, dataToSend)

    ' Hi?n th? ph?n h?i
    Debug.Print response
End Sub

dữ liệu JSON google sheet khác biệt các kiểu JSON khác xem hình hàm mới thêm 3 tham số nếu truyền vào hàm khoanh màu xanh

xử lý các yêu cầu HTTP với nhiều URL, tiêu đề, và phương thức khác nhau (GET, POST, PUT, DELETE).

1725968131242.png
 
To @huhumalu .. viết hàm theo cách bạn gợi ý ... thử xem sao xong tính tiếp .. Lưu ý hai hàm sau chưa tương thích với hàm JSONToArrayMultiThreaded về kiểu dữ liệu mà hàm chỉ trả về dữ liệu mà bạn cần còn xửu lý sao thì ta lại tính tiếp

Copy copde sau vào File Excel bài số 1

Mã:
#If Win64 Then
    Rem ##########
    Declare PtrSafe Function SendHttpRequest Lib "GoogleSheets64.dll" ( _
            ByVal Method As Variant, _
            ByVal URL As Variant, _
            ByVal ContentType As Variant, _
            ByVal Accept As Variant, _
            ByVal UserAgent As Variant, _
            ByVal DataToSend As Variant) As Variant
    Rem ##########
    Declare PtrSafe Function SendHttpRequestEx Lib "GoogleSheets64.dll" ( _
            ByVal Method As Variant, _
            ByVal URL As Variant, _
            ByVal ContentType As Variant, _
            ByVal Accept As Variant, _
            ByVal UserAgent As Variant, _
            ByVal DataToSend As Variant, _
            ByRef ResponseData As Variant) As Boolean
    Rem ##########
    Declare PtrSafe Function ExtractSheetIdFromURL Lib "GoogleSheets64.dll" _
            (ByRef URL As Variant) As Variant
#Else
    Rem ##########
    Declare Function SendHttpRequest Lib "GoogleSheets32.dll" ( _
          ByRef Method As Variant, _
          ByRef URL As Variant, _
          ByRef ContentType As Variant, _
          ByRef Accept As Variant, _
          ByRef UserAgent As Variant, _
          ByRef DataToSend As Variant) As Variant
    Rem ##########
    Declare Function SendHttpRequestEx Lib "GoogleSheets32.dll" ( _
          ByRef Method As Variant, _
          ByRef URL As Variant, _
          ByRef ContentType As Variant, _
          ByRef Accept As Variant, _
          ByRef UserAgent As Variant, _
          ByRef DataToSend As Variant, _
          ByRef ResponseData As Variant) As Boolean
    Rem ##########
    Declare Function ExtractSheetIdFromURL Lib "GoogleSheets32.dll" _
            (ByRef URL As Variant) As Variant
#End If

Sub Test_ExtractSheetIdFromURL()
    Dim URL As String, SheetId As String
    URL = "https://docs.google.com/spreadsheets/d/1-0nB16Fefr8cTbEV7Gj5VjcegL5GcfMIc4RP5C9Sn4w/edit?gid=553666518#gid=553666518"
    SheetId = ExtractSheetIdFromURL(URL)
    Debug.Print SheetId
End Sub

Giải Thích:
1/ Hàm SendHttpRequest dữ liệu trả về hàm
2/ Hàm SendHttpRequestEx dữ liệu trả về tham số ResponseData

Hai hàm trên như nhau chỉ khác cách sử dụng và tuỳ chỉnh

Hàm SendHttpRequest SendHttpRequestEx có thể được sử dụng hiệu quả để gửi và nhận dữ liệu
từ máy chủ khi bạn có đầy đủ thông tin cần thiết như URL, phương thức HTTP (GET, POST, PUT, DELETE),
và các tiêu đề cần thiết (Content-Type, Accept, User-Agent)


Tôi mượn cái link google Sheet của thành viên GPE thử code Hàm

Mã:
Sub GetDataFromGoogleSheet_CSV2()
    Dim csvData As String
    Dim lines As Variant
    Dim line As Variant
    Dim values As Variant
    Dim cleanedValue As String
    Dim i As Long
    Dim j As Long

    ' Gi? s? csvData ch?a d? li?u CSV t? hàm SendHttpRequest
    csvData = SendHttpRequest("GET", "https://docs.google.com/spreadsheets/d/1-0nB16Fefr8cTbEV7Gj5VjcegL5GcfMIc4RP5C9Sn4w/gviz/tq?tqx=out:csv", "text/csv", "text/csv", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0", Null)
    Debug.Print csvData

    ' Tách d? li?u thành t?ng dòng
    lines = Split(csvData, vbLf)
  
    Cells.ClearContents

    ' Duy?t t?ng dòng d? l?y giá tr?
    For i = LBound(lines) To UBound(lines)
        ' Tách t?ng dòng thành các giá tr?
        values = Split(lines(i), ",")

        ' Luu giá tr? vào b?ng tính (thay Sheet1 b?ng tên c?a trang tính c?a b?n)
        For j = LBound(values) To UBound(values)
            ' Lo?i b? các d?u "" th?a
            cleanedValue = Replace(values(j), """", "")
            Sheets("Sheet2").Cells(i + 1, j + 1).Value = Trim(cleanedValue)
        Next j
    Next i

    'MsgBox "D? li?u dã du?c luu vào b?ng tính!"
End Sub

Thử hàm SendHttpRequestEx

Mã:
Sub FetchVNIndexData()
    Dim ResponseData As Variant
    Dim Method As String
    Dim URL As String
    Dim ContentType As Variant
    Dim Accept As Variant
    Dim UserAgent As Variant
    Dim DataToSend As Variant
    Dim Result As Boolean
    Dim JSONToArr As Variant
  
    ' Kh?i t?o các tham s?
    URL = "https://s.cafef.vn/Ajax/PageNew/DataHistory/PriceHistory.ashx?Symbol=VNINDEX&StartDate=&EndDate=&PageIndex=1&PageSize=20"
    Method = "GET"
    ContentType = "application/json"
    Accept = "application/json"
    UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0"
    DataToSend = Null  ' Du lieu di g?i, d? tr?ng cho phuong thuc GET

    ' G?i hàm SendHttpRequest
    Result = SendHttpRequestEx(Method, URL, ContentType, Accept, UserAgent, DataToSend, ResponseData)
    Debug.Print ResponseData

    ' X? lý ph?n h?i
    If Result Then
        ' N?u yêu c?u thành công, hi?n th? d? li?u nh?n du?c
        MsgBox "Response: " & ResponseData
    Else
        ' N?u có l?i, hi?n th? thông báo l?i
        MsgBox "Request failed. Response: " & ResponseData
    End If
End Sub

Rảnh thử xem xong tính



Tải 2 DLL sau về thay thế 2 DLL bài 1 .. file sau chỉ thêm hai hàm trên
 

File đính kèm

  • GoogleSheetsAPI.rar
    3.1 MB · Đọc: 7
Em không hiểu hết cái Bác viết lắm nhưng nhiều code quá cảm nhận là phức tạp, món này chắc dành cho người có chuyên môn về mấy cái này. Vì không hiểu áp dụng vô vướng đâu đó là chào thua.
Bác cho em hỏi, cái này có lấy Shopee được không:
Nếu lấy được thì đỡ phải dùng Python
 
Em không hiểu hết cái Bác viết lắm nhưng nhiều code quá cảm nhận là phức tạp, món này chắc dành cho người có chuyên môn về mấy cái này. Vì không hiểu áp dụng vô vướng đâu đó là chào thua.
Bác cho em hỏi, cái này có lấy Shopee được không:
Nếu lấy được thì đỡ phải dùng Python
Cái này căng lắm không lấy được qua API đâu.
 
Căng mới cần hỏi giải pháp chứ bạn! Chứ không khó hỏi chi mất công các Bác
Mấy năm trước người ta có chia sẻ cách lấy dữ liệu qua API mà bên Shopee làm cũng gắt, hạn chế ngặt nghèo lắm. Hiện giờ mình chưa thấy cách nào hiệu quả hơn việc dùng Selenium để cào dữ liệu, hoặc chắc là có giải pháp mà người ta không chia sẻ ra.
 
CÁI tôi biết cái không chủ yếu là dò + mò cùng Em ChatGPT xong tư duy logis lắp ráp lại thôi

có gì cứ nêu lên ai biết gì xử lý cái đó xong hệ thống lại = Chốt hạ vậy

Nhờ cái thớt bên kia lần đầu tiên tôi hiểu và biết cách xử lý đa luồng chạy song song tại cùng một thời điểm
chia nhỏ ra cho mảng JSON xong giáp lại thanh mảng gán lên Sheet ... có lẻ sẻ áp dụng nhiều nó vì thời công nghệ RAM + Chip CPU - giá bèo giáp máy cấu hình tốt chút chạy đa luồng song song bay vèo vèo

Hôm lâu tôi nhớ tới IDM tải nhiều phần đa luồng song song về máy xong giáp lại thành 1 File.. xong tôi thử hỏi Chat mất buổi sáng cuối cùng cùng ra cách tải File đa luồng song song nhiều phần về máy xong hết nó giáp lại thành một File

xong thử hỏi mảng JSON xem sao ai dè mất hơn 1h nó ra

Hình sau tải file đa luồng song song nhiều phần xong giáp lại thành 1 file test code tôi để vậy xem khi hoàn thiện chuyển vào folder Temp ai thấy
87358bcd56e5f1bba8f4.jpg
 
Lần chỉnh sửa cuối:
Em không hiểu hết cái Bác viết lắm nhưng nhiều code quá cảm nhận là phức tạp, món này chắc dành cho người có chuyên môn về mấy cái này. Vì không hiểu áp dụng vô vướng đâu đó là chào thua.
Bác cho em hỏi, cái này có lấy Shopee được không:
Nếu lấy được thì đỡ phải dùng Python
Nếu được Úp code Python lên đi chia sẻ xem sao xong Tính
 
Nếu được Úp code Python lên đi chia sẻ xem sao xong Tính
Em chưa viết được Bác, Tikia, Lazada hay Web tương tự thì dễ hơn, Shopee cơ chế chặt chẽ, em đang làm thủ công webSCraper, Các Bác thạo món này nhờ các Bác hỗ trợ
Bài đã được tự động gộp:

Mấy năm trước người ta có chia sẻ cách lấy dữ liệu qua API mà bên Shopee làm cũng gắt, hạn chế ngặt nghèo lắm. Hiện giờ mình chưa thấy cách nào hiệu quả hơn việc dùng Selenium để cào dữ liệu, hoặc chắc là có giải pháp mà người ta không chia sẻ ra.
Bạn biết lấy bằng Selenium hoặc beautifulsoup không, chia sẻ dùm mình!
 
Lần chỉnh sửa cuối:
ngày nay vắng khách ... có lẻ tình hình chung là đói

Tôi phá các kiểu từ 10h sáng để tìm cái hàm chuyển mọi loại JSON cuối cùng thất bại.. được cái này tịt cái kia

chán quay sang phá cái Hàm JSON trên VBA mã nguồn có trên Github và trên GPE này sử dụng cũng nhiều dài trên 1000 dòng chi đó
cũng chỉ xử lý vài kiểu JSON mèo cào xong cũng đơ rồi văng vào Thùng RÁC ... //..,,

mất thời gian vào cái thứ tào lao ý tưởng viết hàm xử lý mọi chủng loại JSON gần như quá khó ...

tốt nhất cần xử lý loại Web nào xem nguồn xong viết hàm cho nhanh và bớt một đống If và Optional Rác rưởi làm chậm tốc độ code :p--=0--=0--=0
 
Em chưa viết được Bác, Tikia, Lazada hay Web tương tự thì dễ hơn, Shopee cơ chế chặt chẽ, em đang làm thủ công webSCraper, Các Bác thạo món này nhờ các Bác hỗ trợ
Bài đã được tự động gộp:


Bạn biết lấy bằng Selenium hoặc beautifulsoup không, chia sẻ dùm mình!
beautifulsoup: Không chạy được mã Javascript nhúng trong HTML, nên cách này vô dụng.
Selenium: Cái này bạn cần phải viết mã thật chuẩn sao cho Shopee không nhận diện bạn đang dùng bot để truy cập vào trang, nếu không rất dễ dính kiểm tra bằng captcha.
 
beautifulsoup: Không chạy được mã Javascript nhúng trong HTML, nên cách này vô dụng.
Selenium: Cái này bạn cần phải viết mã thật chuẩn sao cho Shopee không nhận diện bạn đang dùng bot để truy cập vào trang, nếu không rất dễ dính kiểm tra bằng captcha.
Thì ý tôi hỏi là bạn viết được không để nhờ đó, chứ mấy cái lý thuyết bạn nói đương nhiên là tôi hiểu rồi mà!
 
lâu này ta hay keo sử dụng Python lấy dữ liệu Web Siêu nhanh có lẻ cũng tới lúc xem xét lại rồi

Delphi lấy dữ liệu Web OK sạch chỉ là ta chưa biết cách sử dụng nó + nguồn trang Web cần lấy thôi

có điều lấy dữ liệu Web phụ thuộc vào máy chủ của nó cho hay không cho và nó chỉ cần thay đổi tí teo xem như căng mắt ra dò lại từ đầu

nên tôi chỉ dừng ở bức biết chút chút khi cần sử dụng là đủ ... rảnh chơi cái khác thú vị hơn

Hiểu ra nguồn trang Web + cách sử dụng Delphi = OK
 
nghe đâu đó còn cách cùng đường là tải HTML về xong bới tung RÁC lên tìm dữ liệu ... cách này xem ra là hết cách hay sao ý :p
 
Web KT

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

Back
Top Bottom