Lấy dữ liệu web về excel (1 người xem)

  • Thread starter Thread starter huybo
  • Ngày gửi Ngày gửi
Liên hệ QC

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

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

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

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:
Cảm ơn anh.
Nếu được thì anh code cho bài #10 đi anh. Em rất muốn tham khảo xem VBA xử lý MVC như nào.

Vụ này mình chưa có time để tập trung làm nhưng tin rằng nếu ai có cách chạy sự kiện "onclick" của từng cái [+] để web mở detail rồi chạy chạy lệnh đọc HTML của tag <table> là lấy được. Nói vậy nhưng code hoàn chỉnh khá nhiều công sức đấy. Bạn nào có hiểu biết về cách chạy JavaScript trong VBA thì thử làm xem?
 
Tây thuần:
Music Video Crap
Nửa tây nửa việt:
Music Video Cùi
Việt thuần:
(diễn đàn kiểm duyệt)
 
Xin chào các bác! VBA em mới chỉ biết cái đơn giản của cái cơ bản nhất. Giờ em muốn tìm hiểu về CreateObject("msxml2.xmlhttp") để phục vụ việc lấy data trên web cho công việc. Em đã tham khảo code bác Batman viết giúp, xem thêm code bác AutoReply viết ở 1 bài khác nhưng chưa hiểu được nhiều. Vậy em mong 2 bác Batman, AutoReply và các bác trên này có tài liệu nào về CreateObject("msxml2.xmlhttp") để em học thêm, hoặc từ khoá nào để em search được không ạ?
 
Cảm ơn anh.
Nếu được thì anh code cho bài #10 đi anh. Em rất muốn tham khảo xem VBA xử lý MVC như nào.
--> @befaint
Gợi ý : Dùng Selenium. VBA khởi động Python / NodeJS -> Selenium -> Selenium điều khiển Chrome
Python / NodeJS bắn dữ liệu vào Excel. (Khỏe)
Trực tiếp trên VBA -> Selenium Basic - Lổi thời (Mệt nhọc)
Trực tiếp trên VBA -> Internet Explore - Lổi thời (Mệt nhọc)
;)
 
--> @befaint
Gợi ý : Dùng Selenium. VBA khởi động Python / NodeJS -> Selenium -> Selenium điều khiển Chrome
Python / NodeJS bắn dữ liệu vào Excel. (Khỏe)
Trực tiếp trên VBA -> Selenium Basic - Lổi thời (Mệt nhọc)
Trực tiếp trên VBA -> Internet Explore - Lổi thời (Mệt nhọc)
;)
Nếu được, bạn làm hoàn chỉnh cho mình tham khảo với.
Bây giờ mình chỉ thích "một đập ăn ngay". :)
 
Nếu được, bạn làm hoàn chỉnh cho mình tham khảo với.
Bây giờ mình chỉ thích "một đập ăn ngay". :)
Đi mua một cân hạt óc chó hay hạt hạnh nhân. Tha hồ một đập ăn ngay.
Mua loại bóc vỏ sẳn thì khỏi đập luôn, nhưng để lâu không được.
 
Nếu được, bạn làm hoàn chỉnh cho mình tham khảo với.
Bây giờ mình chỉ thích "một đập ăn ngay". :)
Anh @befaint bỏ công tí lại hiểu biết nhiều hơn
Nếu dùng PY: Một ngày học cho Python ( Dể nhất trong tất cả ngôn ngữ )
Nếu NodeJS: Ba ngày với Javascript ( Cái này ngon - biết đâu Anh sẽ chuyển sang một tầm cao mới)
Hai giờ cho Selenium (Phương thức giống IE Elements trong VBA)
Vì nó nằm ngoài GPE nên ... xin rút lui :oops:o_Oo_O
 
1 ngày học nhạc (Dể [sic] nhất trong tất cả các loại nghệ thuật)
Lụm cây đàn ghi ta điện, chơi không thua gì Jimi Hendrix.

Chú: tôi học Python 3 ngày. Nhưng tôi mất 3 tháng vẫn chưa nắm vững NumPy.
 
Đi mua một cân hạt óc chó hay hạt hạnh nhân. Tha hồ một đập ăn ngay.
Mua loại bóc vỏ sẳn thì khỏi đập luôn, nhưng để lâu không được.
"Một đập ăn ngay" là em mượn câu trong trò chơi ô ăn quan: Một đập ăn quan. :)

Nhân tiện nói về mấy loại hạt ăn được và quay về tuổi thơ.. em giới thiệu một hạt ăn ngon hơn hạt óc chó (theo cảm nhận của em là vậy). Có thể do đập mãi mới được ăn nên ngon hơn (và đập không cẩn thận thì ăn cám - phần nhân hạt bị nát như cám). :D

Địa phương em gọi cây đó là cây sồi đá (có thể vì gỗ của nó rất cứng, và hạt giống viên đá về hình dáng và độ cứng).
Nó giống cây sồi gai (loại sồi quả có gai nhọn), cây dẻ nhưng lá thường xanh đậm hơn, lá dài hơn chút, viền lá răng cưa và lá mọc dày hơn.. (không nhớ lắm).
Còn nhân vật chính là hạt của nó: Mùa đông hạt chín và rụng xuống đất, đem nướng hoặc luộc rồi một vài đập mới được ăn. Nướng ngon hơn luộc.
Hoặc để hạt vài tháng sau, nhân hạt chuyển thành nhiều đường, lớp vỏ bọc nhân hạt chuyển sang màu đen và giòn.. lúc này vác búa đập ăn ngay rất ngon.

Video: Nướng hạt sồi, và đập ăn
Link2
--------
Nếu dùng PY: Một ngày học cho Python
Thế này mình thua rồi đó.

Lúc nào bạn rảnh thì làm bài trên cho mình xem với nhé.
 
Ở miệt dưới chúng tôi thì đương nhiên không có những loại cây trút lá mùa Đông, và có lẽ hạt cứng nhất là hạt ... điệp (phượng vỹ)
 

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

Back
Top Bottom