Lấy dữ liệu tự động từ Website vào Excel !

HeSanbi

Thành viên tích cực
Tham gia ngày
24 Tháng hai 2013
Bài viết
906
Được thích
681
Điểm
560
*(Có sẵn File Excel: 8/9/2019 16:50 GMT+7)
Ứng dụng tham khảo dữ liệu Chứng khoán, Tài chính, Bảng Giá trực tuyến ... từ Internet về Excel hoàn toàn miễn phí
Ứng dụng ở file phía dưới sẽ cập nhật dữ liệu tự động liên tục và chính xác từ nguồn uy tín.

Các mục dữ liệu sẽ lấy bao gồm:
- Cổ phiếu: HOSE, HNX, UPCOM, Bảng giá quỹ mở, Bảng giá Phái Sinh, ... Và tập hợp các Cổ Phiếu khác hoặc tự chọn mã.
- Giao dịch thỏa thuận
- Bảng cân đối kế toán
- Báo cáo kết quả kinh doanh
- Báo cáo Lưu chuyển tiền tệ
- Sự kiện quyền
- Chứng quyền
- Realtime - Cập nhật dữ liệu Cổ phiếu liên tục


Tham Khảo Một Số bài viết về tài chính Trên Diễn Đàn:
Lập ngân sách tài chính từ A tới Z


Một số ảnh tham khảo:
----------------------------------
223716
223717

Tag: Cập nhật dữ liệu, Cập nhật dữ liệu web, dữ liệu tự động, cạo website, điều khiển web , điều khiển trình duyệt, dữ liệu từ web,
dữ liệu báo cáo tài chính từ website, Lấy Dữ Liệu Từ Web Vào Excel, lấy dữ liệu từ web, dữ liệu chứng khoán, dữ liệu các công ty, dữ liệu vndirect, dữ liệu vietstock, dữ liệu cổ phiếu ,Bảng Giá trực tuyến, chứng khoán phái sinh, chứng khoán quỹ mở, chứng khoán cơ sở, ...
 

File đính kèm

Lần chỉnh sửa cuối:

fibiz

Thành viên mới
Tham gia ngày
23 Tháng bảy 2013
Bài viết
5
Được thích
0
Điểm
363
Cảm ơn bạn. Nội dung rất hữu ích.
 

ninhhv90

Thành viên mới
Tham gia ngày
22 Tháng chín 2012
Bài viết
32
Được thích
1
Điểm
365
Tuổi
27
Có giải pháp nào file excel luôn được cập nhật trong khi mình không mở được không?
 

Minhdotcom

Thành viên mới
Tham gia ngày
16 Tháng ba 2015
Bài viết
1
Được thích
0
Điểm
0
Bài viết rất bổ ích, nhiều nguồn nghiên cứu, cảm ơn bạn nhé
 

HeSanbi

Thành viên tích cực
Tham gia ngày
24 Tháng hai 2013
Bài viết
906
Được thích
681
Điểm
560
Có giải pháp nào file excel luôn được cập nhật trong khi mình không mở được không?
Bạn tạo một file excel sẽ khởi động cùng hệ thống ở chế độ ẩn, lúc đó thì file sẽ tự động cạo dữ liệu âm thầm.
 
Lần chỉnh sửa cuối:

Tuyen ninh thuan

Thành viên mới
Tham gia ngày
30 Tháng mười hai 2017
Bài viết
4
Được thích
0
Điểm
163
*(Có sẵn File - Đã cập nhật File lấy dữ liệu báo cáo tài chính: 07/08/2019 17:00 GMT+7)

Vì thấy nhiều bạn quan tâm đến việc cạo dữ liệu website, và đà phát triển của công nghệ web, nên hôm nay tôi trở lại với chủ đề của mình, và sẽ có gắn giúp các bạn có thể đạt được mong muốn, mà không phải cần nhiều căn bản về lập trình VBA.

Dưới đây là một số phương pháp giúp cạo dữ liệu bất kì website nào về Excel và cũng có thể upload ngược trở lại ngay trên chính Excel với lập trình VBA.


Trước tiên cần thêm Tools trong VBA dành cho Nhà phát triển:
Mở cửa sổ lập trình VBA (Alt+F11) vào Tools -> References... tìm các gói sau:

+ Microsoft Scripting Runtime (Dùng để khởi tạo Object)​
+ Microsoft HTML Object Library (Dùng để phân tích và tách HTML)​
+ Microsoft XML, v3.0 - > v6.0 (Dùng để phân tích và tách HTML)​
+ Microsoft Internet Controls (Dùng để điều khiển Internet Explorer ) (Nâng cấp lên Internet Explorer 11)​
+ Tải Chrome, tải SeleniumBasic, tải chromedriver ,thêm Tools: Selenium Type Library
Giải nén chromedriver vào thư mục cài đặt SeleniumBasic (C...\AppData\Local\SeleniumBasic)
*Lưu ý với chromedriver, luôn luôn tìm tải phiên bản mới nhất khi chrome cập nhật
Bắt đầu:


Khi phát triển một
1. Giao thức sử dụng để lấy HTML, XML, Json trong VBA:
+ Sử dụng WinHTTPRequests hoặc XMLHTTP:
Sử dụng khi nào: Dữ liệu trong Site được load ngay, không thông qua Javascript.
Set Http = CreateObject("WinHttp.WinHttpRequest.5.1")
Set Http = CreateObject("MSXML2.XMLHTTP") hoặc MSXML2.XMLHTTP60 (với Microsoft XML, v 6.0 ở Office64 ) (truy cập một lần)​
Set Http = CreateObject("MSXML2.ServerXMLHTTP") (Giữ kết nối)​
Hoặc dùng khai báo đồng dạng Early Binding để được gợi ý tự động hoàn thành code:​
'Đồng dạng​
Dim Http As WinHttp.WinHttpRequest
'Early Binding sẽ có từ khóa "New"​
Dim Http As New WinHttp.WinHttpRequest / MSXML2.XMLHTTP / MSXML2.XMLHTTP60 (Office64) / MSXML2.ServerXMLHTTP​
Ưu Điểm: nhanh​
Nhược điểm: không cạo được site có IFrame, không load được Javascript, không giữ kết nối, viết code tới Server hơi phức tạp​
+ Sử dụng Internet Explorer Control:​
Dim IE As New SHDocVw.InternetExplorer
++Ưu điểm: load được Javascript, nhanh , giữ kết nối​
++Nhược điểm: Một số phương thức Get không có, điều khiển một số web kém, không cạo được site có IFrame​
+ Sử dụng Chrome + SeleniumBasic:​
++Ưu điểm: tìm đến đối tượng Element khá nhanh, điều khiển web quá tuyệt vời, đầy đủ mọi phương thức get, load được Javascript, cạo được site có IFrame , bảo mật, nhanh , giữ kết nối, chrome và chromedriver luôn được cập nhật.​
++Nhược điểm: Vòng lặp For Each Element In Elements quá chậm, luôn phải update phiên bản Chromedriver bằng tay​
(trừ khi sử dụng script để tự động tìm và tải - khiến window phải chịu thêm một tiến trình chạy ngầm)​

2. Bốc tách HTML , XML, JSon:
+ HTML: HTMLDocument
+ XML: MSXML2.DOMDocument Hoặc MSXML2.DOMDocument60 (Office 64bit) -

+ JSon: Với Json cần thêm gói được xây dựng sẵn ở Link tải

3. Các đoạn code cơ bản:
Khai báo: Với những ai đang học tập thì tất cả cần được khai báo đồng dạng Early Binding để code khi viết được tự động điền, bằng cách gõ các ký tự đầu và ấn Ctrl+Phím Cách để sử dụng). Khi khai báo Early Binding cần thêm thư viện phù hợp.

Nắm vững HTML: tại đây
PHP:
'Sử dụng trình duyệt:
  Dim IE As SHDocVw.InternetExplorer

'Bóc tách HTML
    Dim Doc As MSHTML.HTMLDocument    'Nhận dạng một Document
    Set Doc = IE.Document 'Hoặc Doc.body.innerHTML = "Text là HTML"
    'Cách đặt biến với Element: Nếu tham chiếu đến Collection thì Biến có "s"
    'Ví dụ: .getElementsByTagname("div") có Elements thì là Collection, .getElementByID("id...") -> là một Element đơn
    Dim Elements As MSHTML.IHTMLElementCollection '(Nhận dạng một Collection của Elements)
    Dim Element As MSHTML.IHTMLElement '(Nhận dạng một Element)
    Dim Anchor As MSHTML.HTMLAnchorElement
    Dim TableCell As MSHTML.HTMLTableCell '(Nhận dạng một tag Table)

    'Dùng For Each Element
    Dim Element  As MSHTML.IHTMLElement
    For Each Element In Doc.getElementsByTagname("div")

    Next
    'Dùng Length - Vị trí bắt đầu mảng luôn luôn bắt đầu từ 0
    Dim i%
    For i = 0 To Doc.getElementsByTagname("div").Length - 1

    Next

'Bóc tách XML
    Dim Doc2 As MSXML2.DOMDocument60
    Dim XmlCell2 As MSXML2.IXMLDOMElement
    Dim xmlCells2 As MSXML2.IXMLDOMNodeList
    Dim MaterialValueElement2 As MSXML2.IXMLDOMElement
    Set Doc2 = New MSXML2.DOMDocument60
    Doc2.LoadXML .responseText
4. Tự động cập nhật dữ liệu:
Dữ liệu có thể tự động cập nhật âm thầm, tự khởi động ứng dụng và câp nhật, ....
**(Cập Nhật sau)

5. Một số thư viện mã nguồn mở:
https://github.com/VBA-tools/VBA-Web/releases/tag/v4.1.5

6. Có thể dùng Ngôn ngữ lập trình khác:

Python (cần Xlwings) hoặc NodeJS (cần package: xlsx , exceljs), cùng với Selenium (hoặc một gói hổ trợ lấy dữ liệu khác) mới có thể làm được ...
Python thì Trực tiếp (cập nhật khi file đang mở) , nodeJS thì gián tiếp (cập nhật khi file đang đóng)
Search gợi ý của mình lên google - keyword:
+ Python: Xlwings , Selenium Python, Python Excel
+ NodeJS: NodeJS Excel , Selenium Nodejs, xlsx, exceljs
Website:
+ Python: https://www.python.org
+ NodeJS: https://www.nodejs.org
+ Xlwings cho Python: https://www.xlwings.org/
+ Selenium: https://www.seleniumhq.org/docs/
Để chạy nodejs (cần tải thêm Plugin Nodejs trong pycharm) và Python dùng IDE pycharm: https://www.jetbrains.com/pycharm/
Trang hỗ trợ tốt nhất hiện nay: stackoverflow.com, github, và google



Liên hệ lập trình:
Facebook: fb.com/he.sanbi hoặc tìm kiếm he.sanbi
Link tài trợ

Tag: Cập nhật dữ liệu, Cập nhật dữ liệu web, dữ liệu tự động, cạo website, điều khiển web , điều khiển trình duyệt, dữ liệu từ web,
dữ liệu báo cáo tài chính từ website, lấy dữ liệu từ web, dữ liệu chứng khoán, dữ liệu các công ty, dữ liệu vndirect, dữ liệu vietstock, dữ liệu cổ phiếu ...
Bài đã được tự động gộp:

File lỗi tùm lum bạn ơi:
- Khi chuyển mã chứng khoán khác nó báo lỗi Runtime 91
- Khi chuyển mã chứng khoán của các công ty chứng khoán (Ví dụ: HCM) cũng hiện lỗi 91
- Dữ lieu Sheet Realtime không liên kết với mã chứng khoán đã chọn ở sheet BCD_KT
Mỗi lần xuất hiện lỗi Runtime 91 thì bị treo file excel không đóng được
Mong bạn sửa lỗi trên giúp mình, mình chân thành cảm ơn
 
Lần chỉnh sửa cuối:

Tuyen ninh thuan

Thành viên mới
Tham gia ngày
30 Tháng mười hai 2017
Bài viết
4
Được thích
0
Điểm
163
File vẫn còn lỗi bạn ơi. Cụ thể là khi chuyển mã chứng khoán của các công ty chứng khoán (ví dụ: HCM, VND,...) thì sheet BC_CLTT không cập nhật được bạn ơi.
Cột nội dung chi tiết bạn cho nó hiện số tiền cụ thể được chi trả được không bạn vì để chữ không tính toán được bạn ơi. Khỏi lấy dữ liệu cổ tức bang cổ phiếu
Mong bạn sửa lỗi trên giúp mình, mình chân thành cảm ơn bạn nhé
 

Tuyen ninh thuan

Thành viên mới
Tham gia ngày
30 Tháng mười hai 2017
Bài viết
4
Được thích
0
Điểm
163

HeSanbi

Thành viên tích cực
Tham gia ngày
24 Tháng hai 2013
Bài viết
906
Được thích
681
Điểm
560
File excel trên của bạn [U][LEFT][B][SIZE=4][FONT=Segoe UI][COLOR=rgb(0, 102, 102)][B][COLOR=rgb(0, 0, 128)]HeSanbi[/COLOR][/B][/COLOR][/FONT][/SIZE][/B][/LEFT][/U] 3 sheet đầu lấy dữ lieu từ nguồn vndirect nên dữ lieu bị thiếu ở sheet LCTT, mình muốn đổi sang lấy dữ lieu tại https://finance.vietstock.vn/ thì làm sao, mong các bạn giúp mình với.
Bạn mong sự giúp đỡ thì sẽ được trợ giúp, bạn cố gắng theo dõi bài viết này, file mới sẽ được cập nhật trong thời gian sớm nhất có thể.
 

Tuyen ninh thuan

Thành viên mới
Tham gia ngày
30 Tháng mười hai 2017
Bài viết
4
Được thích
0
Điểm
163
file excel cập nhật bên trên lấy dữ liệu từ vndirect nên dữ lieu lấy không còn chính xác nhất là ở sheet BC-CLTT bị sai (không có dữ liệu của mã HCM, VND). Mong các bạn giúp mình đổi lại trang lấy dữ lieu là finance.vietstock.vn thay vì trang vndirect như trước đây. Mình cảm ơn các bạn trước.
 

tylor

Thành viên mới
Tham gia ngày
10 Tháng mười 2018
Bài viết
1
Được thích
0
Điểm
13
Bản cập nhật mới nhất vẫn bị lỗi ở sheet BC_KQKD. Dữ liệu không thay đổi dù đã chuyển đổi sang các công ty khác. Mong bác fix lỗi giúp với. Sheet BC_LCTT bác có thể lấy thêm dữ liệu của các năm còn lại của báo cáo tài chính được không? Mong được giúp đỡ. Xin chân thành cảm ơn.
*(Có sẵn File - Đã cập nhật File lấy dữ liệu báo cáo tài chính: 21/08/2019 16:44 GMT+7)

Vì thấy nhiều bạn quan tâm đến việc cạo dữ liệu website, và đà phát triển của công nghệ web, nên hôm nay tôi trở lại với chủ đề của mình, và sẽ có gắn giúp các bạn có thể đạt được mong muốn, mà không phải cần nhiều căn bản về lập trình VBA.

Dưới đây là một số phương pháp giúp cạo dữ liệu bất kì website nào về Excel và cũng có thể upload ngược trở lại ngay trên chính Excel với lập trình VBA.


Trước tiên cần thêm Tools trong VBA dành cho Nhà phát triển:
Mở cửa sổ lập trình VBA (Alt+F11) vào Tools -> References... tìm các gói sau:

+ Microsoft Scripting Runtime (Dùng để khởi tạo Object)​
+ Microsoft HTML Object Library (Dùng để phân tích và tách HTML)​
+ Microsoft XML, v3.0 - > v6.0 (Dùng để gửi và nhận dữ liệu: Source HTML, json, ...)​
+ Microsoft Internet Controls (Dùng để điều khiển Internet Explorer ) (Nâng cấp lên Internet Explorer 11)​
+ Tải Chrome, tải SeleniumBasic, tải chromedriver ,thêm Tools: Selenium Type Library
Giải nén chromedriver vào thư mục cài đặt SeleniumBasic (C...\AppData\Local\SeleniumBasic)
*Lưu ý với chromedriver, luôn luôn tìm tải phiên bản mới nhất khi chrome cập nhật
Bắt đầu:


1. Giao thức sử dụng để lấy HTML, XML, Json trong VBA:

+ Sử dụng WinHTTPRequests hoặc XMLHTTP:
Sử dụng khi nào: Dữ liệu trong Site được load ngay, không thông qua Javascript.
Set Http = CreateObject("WinHttp.WinHttpRequest.5.1")
Set Http = CreateObject("MSXML2.XMLHTTP") hoặc MSXML2.XMLHTTP60 (với Microsoft XML, v 6.0 ở Office64 ) (truy cập một lần)​
Set Http = CreateObject("MSXML2.ServerXMLHTTP") (Giữ kết nối)​
Hoặc dùng khai báo đồng dạng Early Binding để được gợi ý tự động hoàn thành code:​
'Đồng dạng​
Dim Http As WinHttp.WinHttpRequest
'Early Binding sẽ có từ khóa "New"​
Dim Http As New WinHttp.WinHttpRequest / MSXML2.XMLHTTP / MSXML2.XMLHTTP60 (Office64) / MSXML2.ServerXMLHTTP​
Ưu Điểm: nhanh​
Nhược điểm: không cạo được site có IFrame, không load được Javascript, không giữ kết nối, viết code tới Server hơi phức tạp​
+ Sử dụng Internet Explorer Control:​
Dim IE As New SHDocVw.InternetExplorer
++Ưu điểm: load được Javascript, nhanh , giữ kết nối​
++Nhược điểm: Một số phương thức Get không có, điều khiển một số web kém, không cạo được site có IFrame​
+ Sử dụng Chrome + SeleniumBasic:​
++Ưu điểm: tìm đến đối tượng Element khá nhanh, điều khiển web quá tuyệt vời, đầy đủ mọi phương thức get, load được Javascript, cạo được site có IFrame , bảo mật, nhanh , giữ kết nối, chrome và chromedriver luôn được cập nhật.​
++Nhược điểm: Vòng lặp For Each Element In Elements quá chậm, luôn phải update phiên bản Chromedriver bằng tay​
(trừ khi sử dụng script để tự động tìm và tải - khiến window phải chịu thêm một tiến trình chạy ngầm)​

2. Bốc tách HTML , XML, JSon:
+ HTML: HTMLDocument
+ XML: MSXML2.DOMDocument Hoặc MSXML2.DOMDocument60 (Office 64bit) -

+ JSon: Với Json cần thêm gói được xây dựng sẵn ở Link tải

3. Các đoạn code cơ bản:
Khai báo: Với những ai đang học tập thì tất cả cần được khai báo đồng dạng Early Binding để code khi viết được tự động điền, bằng cách gõ các ký tự đầu và ấn Ctrl+Phím Cách để sử dụng). Khi khai báo Early Binding cần thêm thư viện phù hợp.

Nắm vững HTML: tại đây
PHP:
'Sử dụng trình duyệt:
  Dim IE As SHDocVw.InternetExplorer

'Bóc tách HTML
    Dim Doc As MSHTML.HTMLDocument    'Nhận dạng một Document
    Set Doc = IE.Document 'Hoặc Doc.body.innerHTML = "Text là HTML"
    'Cách đặt biến với Element: Nếu tham chiếu đến Collection thì Biến có "s"
    'Ví dụ: .getElementsByTagname("div") có Elements thì là Collection, .getElementByID("id...") -> là một Element đơn
    Dim Elements As MSHTML.IHTMLElementCollection '(Nhận dạng một Collection của Elements)
    Dim Element As MSHTML.IHTMLElement '(Nhận dạng một Element)
    Dim Anchor As MSHTML.HTMLAnchorElement
    Dim TableCell As MSHTML.HTMLTableCell '(Nhận dạng một tag Table)

    'Dùng For Each Element
    Dim Element  As MSHTML.IHTMLElement
    For Each Element In Doc.getElementsByTagname("div")

    Next
    'Dùng Length - Vị trí bắt đầu mảng luôn luôn bắt đầu từ 0
    Dim i%
    For i = 0 To Doc.getElementsByTagname("div").Length - 1

    Next

'Bóc tách XML
    Dim Doc2 As MSXML2.DOMDocument60
    Dim XmlCell2 As MSXML2.IXMLDOMElement
    Dim xmlCells2 As MSXML2.IXMLDOMNodeList
    Dim MaterialValueElement2 As MSXML2.IXMLDOMElement
    Set Doc2 = New MSXML2.DOMDocument60
    Doc2.LoadXML .responseText
4. Tự động cập nhật dữ liệu:
Dữ liệu có thể tự động cập nhật âm thầm, tự khởi động ứng dụng và câp nhật, ....
**(Cập Nhật sau)

5. Một số thư viện mã nguồn mở:
https://github.com/VBA-tools/VBA-Web/releases/tag/v4.1.5

6. Có thể dùng Ngôn ngữ lập trình khác:

Python (cần Xlwings) hoặc NodeJS (cần package: xlsx , exceljs), cùng với Selenium (hoặc một gói hổ trợ lấy dữ liệu khác) mới có thể làm được ...
Python thì Trực tiếp (cập nhật khi file đang mở) , nodeJS thì gián tiếp (cập nhật khi file đang đóng)
Search gợi ý của mình lên google - keyword:
+ Python: Xlwings , Selenium Python, Python Excel
+ NodeJS: NodeJS Excel , Selenium Nodejs, xlsx, exceljs
Website:
+ Python: https://www.python.org
+ NodeJS: https://www.nodejs.org
+ Xlwings cho Python: https://www.xlwings.org/
+ Selenium: https://www.seleniumhq.org/docs/
Để chạy nodejs (cần tải thêm Plugin Nodejs trong pycharm) và Python dùng IDE pycharm: https://www.jetbrains.com/pycharm/
Trang hỗ trợ tốt nhất hiện nay: stackoverflow.com, github, và google


Tag: Cập nhật dữ liệu, Cập nhật dữ liệu web, dữ liệu tự động, cạo website, điều khiển web , điều khiển trình duyệt, dữ liệu từ web,
dữ liệu báo cáo tài chính từ website, Lấy Dữ Liệu Từ Web Vào Excel, lấy dữ liệu từ web, dữ liệu chứng khoán, dữ liệu các công ty, dữ liệu vndirect, dữ liệu vietstock, dữ liệu cổ phiếu ,...




Liên hệ lập trình:
Facebook: fb.com/he.sanbi
Messenger: m.me/he.sanbi
hoặc tìm kiếm he.sanbi
SĐT: 0382266388

Link tài trợ
 
Top Bottom