10/10/2018, 11:24

hỏi cách bóc tách dữ liệu hiểu quả

Hiện tại mình muốn bóc tách các thông số của cổ phiếu tại vietstock và đưa vào mảng.
Cụ thể là link: http://data.vietstock.vn/bang-gia-truc-tuyen/hsx.aspx
Nhưng mà nó có lắm mã và nhiều thông số quá.
Bạn nào có thể hướng dẫn mình cách làm. Thanks!
Onenix viết 13:35 ngày 10/10/2018
Đối với các trang về chứng khoáng người ta không dùng bóc tách, dữ liệu trả về đều ở dạng JSON.

Nói vậy là bạn hiểu cách lấy thế nào.
trunghieuhf viết 13:35 ngày 10/10/2018
Cách của mình làm là bóc tách cái bảng của nó bằng
file_get_contents("http://data.vietstock.vn/bang-gia-truc-tuyen/hsx.aspx");
nhưng vẫn chưa lấy được từng fied để cho vào màng.

Cách bạn nói dùng JSON mình chưa hiểu lắm, có thể chỉ cho mình cách làm không.
Onenix viết 13:27 ngày 10/10/2018
Bạn nên đọc để hiểu JSON là gì : http://code.onenix.net/2011/08/json-la-gi.html

Nếu bạn tìm hiểu sâu một chút sẽ biết, đối với các trang chứng khoáng, client sẽ liên tục update dữ liệu thay đổi trên server mà không cần F5, dữ liệu trao đổi giữa client và server chính là JSON.

Thay vì việc bạn đi bóc tách HTML bạn có thể lấy dễ dàng hơn bằng việc decode JSON mà mình đã nói ở trên.

Mình chỉ gợi ý thế thôi, phần còn lại bạn nghiên cứu thêm, tự nghiên cứu sẽ học được thêm nhiều thứ.

Best regards.
trunghieuhf viết 13:37 ngày 10/10/2018
Ok. về cái JSON mình sẽ tìm hiểu.
Nhưng trước mắt mình tập trung vào bóc tách qua html thôi.
Vì bảng điện tử này có khoảng 600 cổ phiếu, và nó update ko liên tục. Mình chỉ cần lấy phiên đóng ngày hôm qua, tức là 1 ngày chỉ cần 1 lần. Và lấy về còn phải xử lý nữa.
Nên nếu lấy auto rồi xử lý trực tiếp có lẽ sẽ làm trang tải chậm.
Mình có sử dụng đoạn này để lấy mã cổ phiếu:
$pattern = '/\<td ref="lr" title=\'.*\' id="AAM_CK" style="width: 3.4%;text-align:center; font-weight:bold;font-size:13px;font-family:Courier New; cursor:pointer;" class=\'Pr\' onClick="window.open(\'.*\',\'Vietstock Finance\',\'location=1,status=1,scrollbars=1,width =800,height=600\')">(.*)\<\/td\>/';
rồi preg_match_all nhưng mà ko được.
Onenix viết 13:29 ngày 10/10/2018
Mình đã nói ở trên rồi, đối với các trang chứng khoáng không nên bóc tách HTML, thậm trí có một số trang bạn không thể bóc tách html, vì html bạn dùng file_get_contents không có dữ liệu gì về chứng khoáng.

Bạn có thể test với http://directboard6.vndirect.com.vn/...aspx?locale=vn

Thực ra bạn chưa hiểu cơ chế hoạt động của các trang chứng khoáng, có thể bạn nhìn trên bảng board giao dịch của sàn không có gì thay đổi, nhưng thực chất giữa browser của bạn vẫn đang âm thầm cập nhật dữ liệu từ server về. Nếu có sự thay đổi nó sẽ view cho bạn xem.

Để làm được điều đó thì cứ khoảng (x) giây browser sẽ send một request lên server để update dữ liệu, cơ chế update dữ liệu ở đây sử dụng Ajax để lấy.

Nếu bạn có thể giả cái ajax request kia thì bạn có thể lấy dữ liệu của họ về ở dạng JSON, khi đã có JSON thì việc parse nó rất đơn giản.

Nếu bạn vẫn muốn bóc tách bằng html thì có thể tham khảo thư viện simplehtmldom, bóc tách cái này sẽ tiện hơn.

Best regards
trunghieuhf viết 13:30 ngày 10/10/2018
Bạn có thể cho mình 1 ví dụ về JSON từ chính link http://directboard6.vndirect.com.vn/...aspx?locale=vn được không. Mình đọc lý thuyết chưa hiểu lắm. Với lại mình cũng đang cần bóc tách ngay cái bảng này. Thanks
phaocuusinh viết 13:33 ngày 10/10/2018
Nói ngắn gọn thế này nhé, thay vì bạn get từ URL của ASPX, và nó cho ra 1 mớ TAG HTML. bạn phải lọc kết quả tùm lum thứ.

Thay vào đó bạn tìm đường dẫn trong kết quả URL của ASXP sẽ có 1 lệnh POST hay GET có nhiệm vụ lấy về từ server với kết quả là file JSON thay vì ASPX.

Trong file JSON sẽ bao gồm những mảng (array) kết quả về bảng chứng khoán sẽ hiện thị trên URL của ASXP.

Như vậy thay vì bóc tách trên HTML của URL của ASXP , bạn chỉ cần lấy giá trị trong mảng (array) từ file JSON.

và chắc chắn URL của ASXP chạy AJAX. Hoặc là JSON hoặc là XML. cả 2 đều chơi tốt. Và hiệu quả hơn HTML.

Bạn nên tìm hiểu về XML và JSON là ok. cái này không phải là khó chỉ dẫn, mà là không biết bạn có hiểu vấn đề giải quyết với JSON hay XML không mà thôi.
phaocuusinh viết 13:30 ngày 10/10/2018
Theo mình biết cái
http://directboard6.vndirect.com.vn/...aspx?locale=vn

nó cóa check Status lấy 1 file từ lệnh post:
URL=http://data.vietstock.vn/bang-gia-truc-tuyen/StockHandler.ashx?getVersion=105953&floor=1

Kết quả trả về :
[{"I":"ver","V":"105953","C":""},{"I":"MKT","V":"Th ị trường đóng cửa","C":""},{"I":"Date","V":"08/08/2011 11:00","C":""}]
Đấy chính là JSON. và tất nhiên không chỉ 1 cái JSON đó.
trunghieuhf viết 13:36 ngày 10/10/2018
mình chỉ quen tương tác với dữ liệu bằng ajax, còn json thì chưa dùng lần nào cả. trước mắt thì mình chỉ cần lấy field giá TC của các cổ thôi
Bài liên quan
0