Lấy dữ liệu web về excel

Liên hệ QC

huybo

Thành viên hoạt động
Tham gia
24/4/13
Bài viết
115
Được thích
5
Xin chào các anh chị!
Hiện tại em đang dùng macro để lấy dữ liệu trên web ( Data- From Web) nhưng không ổn định, chậm, và hình như phụ thuộc nhiều vào việc web đó có cho phép hay không. Qua tìm hiểu em thấy mọi người có dùng CreateObject("MSXML2.ServerXMLHTTP") nhưng em tìm hiểu về nó mà ít thông tin quá và trình gà nên không hiểu.
Kính mong anh chị giúp đỡ qua 1 ví dụ cụ thể là trang web này ạ: http://s.cafef.vn/bao-cao-tai-chinh...-cong-ty-co-phan-dau-tu-va-thuong-mai-tng.chn
Em xin chân thành cảm ơn!
 
Các bác xem giúp em với ạ!
 
Với trang như này thì dễ mà bạn, bạn thử dùng tính năng Query đi, thao tác như sau: vào tab DATA chọn NEW QUERY > FROM OTHER SOURCES > FROM WEB, sau đó điền link trên vào

kết quả sẽ như file đính kèm này

chúc bạn thành công
 

File đính kèm

  • huybo.xlsx
    17.1 KB · Đọc: 76
Cám ơn bác Phương. Dùng tính năng Query như em đã nói rồi đó ạ. Em làm macro để dùng Query nhưng không ổn định, và còn tuỳ thuộc vào web đó có cho mình lấy hay ko. Nên em mới đổi hướng sang dùng CreateObject("MSXML2.ServerXMLHTTP") để trang web nào cũng có thể lấy được
 
Với trang như này thì dễ mà bạn, bạn thử dùng tính năng Query đi, thao tác như sau: vào tab DATA chọn NEW QUERY > FROM OTHER SOURCES > FROM WEB, sau đó điền link trên vào
Bạn cho hỏi, các menu này có trên excel 2010 không?
Nếu có bạn có thể hướng dẫn chi tiết được không?
Xin cảm ơn!
 
Bạn cho hỏi, các menu này có trên excel 2010 không?
Nếu có bạn có thể hướng dẫn chi tiết được không?
Xin cảm ơn!
Bác vào Data -> From Web. rồi dán đường link vào. kích các nút mũi tên vào phần muốn lấy là được ạ
Bài đã được tự động gộp:

Các bác giúp em với!
 
Những bài loại này có rồi, tìm và đọc thôi.

Muốn lấy gì cụ thể thì phải nói chứ trên trang có vô vàn dữ liệu. Đừng bắt người khác phải đoán khi mình có thể nói rõ.

Nếu lấy khoảng sau dòng Từ quý I/2015 BCTC được hiển thị theo thông tư 200 của Bộ tài chính thì vd. chạy Sub GetTable
 

File đính kèm

  • huybo.xlsm
    22.3 KB · Đọc: 101
Những bài loại này có rồi, tìm và đọc thôi.

Muốn lấy gì cụ thể thì phải nói chứ trên trang có vô vàn dữ liệu. Đừng bắt người khác phải đoán khi mình có thể nói rõ.

Nếu lấy khoảng sau dòng Từ quý I/2015 BCTC được hiển thị theo thông tư 200 của Bộ tài chính thì vd. chạy Sub GetTable
Em xin lỗi bác, xin lỗi mọi người là đã để mọi người phải đoán mò. Nội dung em định lấy thì đúng như bác làm giúp em rồi ạ. Em sẽ mày mò Code của bác để còn áp dụng Web khác. Có gì chưa hiểu em xin phép được hỏi thêm ạ. Em chân thành cảm ơn!
Bài đã được tự động gộp:

Lúc đầu tôi cũng mày mò nhưng kết quả không được như bài 3 nên mới hỏi!
Hình như đấy là add in mới hay sao ý bác ạ. Nhưng bác dùng cái của bác batman1 ý. Phê lắm!
 
Cho mình ké chút, có bác nào cao tay get data được từ những thằng như này không ạ http://danhba.hanoi.edu.vn/
Em dùng các thủ đoạn rồi mà pó cái tay
 
cả trang có mỗi 1 bảng thôi mà bác, cái khó là nó có cái dấu + ở bên trái, cứ phải bấm vào nó mới ra phần bị ẩn đi, mà cái chỗ bị ẩn đi đó mới là chỗ cần thiết nhất
 
cả trang có mỗi 1 bảng thôi mà bác, cái khó là nó có cái dấu + ở bên trái, cứ phải bấm vào nó mới ra phần bị ẩn đi, mà cái chỗ bị ẩn đi đó mới là chỗ cần thiết nhất
Bác viết 1 bài nêu vấn đề của bác đi. Các bác ở đây giúp đỡ ngay đó ạ.
 
Bác viết 1 bài nêu vấn đề của bác đi. Các bác ở đây giúp đỡ ngay đó ạ.
Thì bạn ấy muốn lấy dữ liệu bảng dữ liệu của web đó rành rành còn gì. Cái web này không dễ lấy dữ liệu bằng code VBA, chắc phải dùng ngôn ngữ khác + javascript
 
Không có ngôn ngữ hay công cụ lập trình nào lấy được tất cả dữ liệu mà bạn muốn đâu, trừ khi bạn có account vào database của web!
Nguyên lý các cách lấy dữ liệu trên web là chỉ có thể lấy tối đa những gì bạn nhìn thấy trên web, bản chất bạn đang lấy dữ liệu của client chứ không phải từ database server. Nên đừng nhọc công tìm kiếm cách lấy chủ động hết dữ liệu nhé.
 
Bạn ở bài #10 (#12) cũng chỉ cần lấy những gì nhìn thấy trên website đó mà anh.

Anh làm giúp bài đó đi, cho em và mọi người tham khảo với.

CÓ một ý của bạn đó "cứ phải nhấn vào dấu "+" mới lại lấy tiếp được dữ liệu" => Đây chính là lúc ta mới nhìn thấy :). Còn khi chưa nhấn nút đó thì dữ liệu vẫn nằm trên Server.

Nguyên lý của làm web người ta sẽ dựa vào lệnh gọi từ Client/Web để trả về dữ liệu cho máy tính, lúc này các tool hay code kiếc mới có cơ hội để đọc HTML lấy dữ liệu trong cấu trúc TABLE (nới mã web đã nhận từ server). Vậy nên bản chất vẫn là chỉ lấy được những gì đã nhìn hoặc đã click.

Có một cách làm khá tiểu xảo là chạy đoạn JavaScript để chạy cái tên sự kịc "Click" với điều kiện biết tên lệnh gọi đó. Cho lệnh JavaScript này vào vòng lặp tới lần click thứ n :).
 
CÓ một ý của bạn đó "cứ phải nhấn vào dấu "+" mới lại lấy tiếp được dữ liệu" => Đây chính là lúc ta mới nhìn thấy :). Còn khi chưa nhấn nút đó thì dữ liệu vẫn nằm trên Server.

Nguyên lý của làm web người ta sẽ dựa vào lệnh gọi từ Client/Web để trả về dữ liệu cho máy tính, lúc này các tool hay code kiếc mới có cơ hội để đọc HTML lấy dữ liệu trong cấu trúc TABLE (nới mã web đã nhận từ server). Vậy nên bản chất vẫn là chỉ lấy được những gì đã nhìn hoặc đã click.

Có một cách làm khá tiểu xảo là chạy đoạn JavaScript để chạy cái tên sự kịc "Click" với điều kiện biết tên lệnh gọi đó. Cho lệnh JavaScript này vào vòng lặp tới lần click thứ n :).
Anh viết code lấy dữ liệu trang web đó đi.

Thực sự em rất muốn tham khảo bài giải cụ thể cho website kia.
 
Anh viết code lấy dữ liệu trang web đó đi.

Thực sự em rất muốn tham khảo bài giải cụ thể cho website kia.

Cách đây khoảng 1-2 tháng mình đã giúp một bạn code VBA để lấy dữ liệu từ web về mà bây giwof tìm lại mà không thấy. Bạn tìm giúp mình để lấy mã nguồn nhé.
Bài đã được tự động gộp:

Code VBA để lấy dữ liệu từ website CafeF về đây nhé.

Mã:
Public Sub GetdataKLKhopLenh(ByVal StockSticker As String, ByVal getondate As String)
    Dim qrytbl As QueryTable
    Dim qrytbls As QueryTables
    Dim Connstr As String
    Dim bflag As Boolean
  
    DeleteAllQry
  
    Connstr = "URL;http://s.cafef.vn/Lich-su-giao-dich-" & StockSticker & "-6.chn?date=" & getondate
  
    Set qrytbls = ActiveSheet.QueryTables
    Set qrytbl = qrytbls.Add(Connection:=Connstr, Destination:=Range("A5"))
        qrytbl.AdjustColumnWidth = True
        qrytbl.FillAdjacentFormulas = True
        qrytbl.FieldNames = True
        qrytbl.RowNumbers = False
        qrytbl.FillAdjacentFormulas = True
        qrytbl.PreserveFormatting = False
        qrytbl.RefreshOnFileOpen = True
        qrytbl.BackgroundQuery = True
        qrytbl.RefreshStyle = xlInsertDeleteCells
        qrytbl.SavePassword = False
        qrytbl.SaveData = True
        qrytbl.RefreshPeriod = 1    '1 minute period to refresh data
        qrytbl.WebSelectionType = xlSpecifiedTables
        qrytbl.WebFormatting = xlWebFormattingNone 'xlWebFormattingAll '
        qrytbl.WebTables = """GirdTable2"",""tblData"""
        qrytbl.WebPreFormattedTextToColumns = False
        qrytbl.WebConsecutiveDelimitersAsOne = True  'false
        qrytbl.WebSingleBlockTextImport = True 'False
        qrytbl.WebDisableDateRecognition = False
        qrytbl.WebDisableRedirections = False
        qrytbl.Refresh BackgroundQuery:=True
End Sub
'----------------------------------------------'
Sub DeleteAllQry()
    Dim qry As QueryTable
    For Each qry In ActiveSheet.QueryTables
        qry.ResultRange.ClearContents
        qry.Delete
    Next
End Sub
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom