Tham dự Tech Lounge

Tham dự Tech Lounge


Mình đã làm TOOL GA lấy dữ liệu từ tinhte như thế nào

5/1/2022 8:2Phản hồi: 63
Mình đã làm TOOL GA lấy dữ liệu từ tinhte như thế nào


Node.js là gì

[​IMG]Node.js là một nền tảng được xây dựng dựa trên V8 Javascript engine, sử dụng Javascript để code server-side.

Mình code Javascript cho Website cá nhân và App Script (dùng cho hệ thống dữ liệu) thường xuyên nên việc đọc tài liệu của Node.js không mất quá nhiều thời gian, chỉ phải làm quen với những khái niệm mới để làm việc trên server.

Bài toán đặt ra

Mình tạo một bài viết trên tinhte và chia sẻ vào Group LG IT để rủ mọi người comment, đủ 1k comment là quay số.

https://tinhte.vn/thread/tang-arm-nb-f80-cho-anh-em-tham-gia-lg-it-group.3452597/

Tặng ARM NB F80 cho anh em tham gia LG IT Group

VIDEO KẾT QUẢ QUAY GAME ARM NB F80 Lần đầu làm game quay xổ số mà nó hồi hộp còn hơn phim hành động! Số may mắn: 859 Nick trúng giải: https://tinhte.vn/profile/kienvu154.2877717/ Đã nhắn tin cho bạn…
tinhte.vn


Trước đó thì mình định quay số thủ công bằng file Excel, một trang của bài viết sẽ có 19 comment, cứ như vậy tính lên thì sẽ có danh sách như sau:

sheet-GA.jpg Khi quay số trong random.org xong thì chỉ cần xác định số đó nằm ở trang nào rồi vô đếm số để chọn người may mắn. Sau đó thì mình thấy cách này không được tinh tế lắm, nên đổi qua phương án làm Tool.

tool-ga.jpg Mình phác thảo Tool trong đầu:
  1. Có một ô nhập link bài viết tinhte, một ô nhập số trang
  2. Bấm nút là Tool sẽ tự động lấy dữ liệu comment về
  3. Dữ liệu sẽ là link profile của thành viên, có đánh số thứ tự để tiện random
  4. Nếu một thành viên comment nhiều lần thì Tool sẽ tự động lọc để tỉ lệ thắng giải của mọi người là như nhau

Quá trình thực hiện

*Đây không phải bài hướng dẫn (tutorial), mình sẽ không viết chuyên sâu về code vì mình cũng chỉ ở level Beginner, mình chỉ tập trung vào giải thích để các bạn không biết về code vẫn có thể đọc và hiểu được.

Quảng cáo


*Hình ảnh minh họa mình chạy Tool ở local (máy mình)

Việc lấy dữ liệu từ một trang web gọi là "Web Scraping", này các bạn làm phân tích dữ liệu chắc quen quá rồi nè. Mình sử dụng một thư viên của Node gọi là Puppeteer, nó có khả năng điều khiển Chrome Headless Browser (trình duyệt không cần giao diện) qua code.

Các bạn có thể tìm hiểu thêm tại đây: puppeteer/puppeteer: Headless Chrome Node.js API (github.com)

vscode-1.jpg
Mình code bằng Visual Studio Code, đi từ ý tưởng → nghiên cứu docs → xem video Youtube → code hoàn chỉnh khoảng 3 tiếng

Nguyên lý hoạt động

tool-ga-1.jpg

Quảng cáo


Để lấy được comment trong bài thì mình phải tìm hiểu HTML, CSS của nó, chuột phải vào tên nick của thành viên và chọn Inspect (mình dùng trình duyệt Microsoft Edge).

Bạn nào chưa biết HTML, CSS thì xem qua bài viết này nha: https://tinhte.vn/thread/tu-lam-game-khong-qua-kho-biet-co-ban-lap-trinh-tre-em-cung-lam-duoc.3440017/

tool-ga-2.jpg
Xong khi bấm Inspect thì mình thấy được cái mình cần lấy là đoạn link: /profile/[tên thành viên]
Nó nằm trong một cái div (division - hộp chứa các thành phần của HTML) có phân loại (class) tên là “jsx-691990575”

tool-ga-3.jpg
Khi mình bỏ link và số trang vào Tool và bấm Submit thì:
  1. Thằng Puppeteer nó sẽ mở link bằng một trình duyệt vô hình (chúng ta không nhìn thấy được)
  2. Nó mở trang 1 → tìm tất cả những cái div có phân loại “jsx-691990575” trong trang và lấy cái link profile của các thành viên có comment bỏ vào một mảng (Array) - các bạn cứ hiểu nôm na là một cái hộp chứa kết quả
  3. Sau khi nó lấy hết ở trang 1 rồi nó sẽ bấm sang trang 2 → lặp lại các bước → bỏ link profile thành viên comment ở trang 2 vào hộp chứa kết quả
  4. Quá trình này diễn ra tương tự cho tất cả các trang còn lại (bài viết mình làm là 1054 comment có 54 trang)
  5. Sau khi lấy xong hết các trang, Tool sẽ mở một trang mới và lấy tất cả dữ liệu trong hộp kết quả hiển thị lên cho chúng ta xem
tool-ga-4.jpg
Kết quả của bài viết 1054 comment thì mình lấy được 975 comment, do mình có code một phần để lọc những nick comment nhiều lần nhằm đảm bảo tính công bằng. Sau đó mình dùng random.org chọn ra số may mắn 1-975 → bạn may mắn đợt vừa rồi là số 859 (bạn Kiên Vũ sống tại Hà Nội).

Cách thức tương tự có thể áp dụng để lấy Data từ các nguồn khác như Facebook nhưng sẽ phức tạp hơn nhiều, khi nào có thời gian mình sẽ làm thử và chia sẻ cùng mọi người.

Qua việc giải bài toán làm Tool GA thì mình thấy là:
  1. Khi biết lập trình thì có thể tạo ra công cụ để giải quyết công việc vui vẻ hơn,
  2. Tool này mình làm ra để hỗ trợ các mod, khacten làm Game GA → giúp đỡ được mọi người xung quanh,
  3. Vận dụng Javascript để Code server-side (điều trước đây mình chưa bao giờ làm), tạo tiền đề để học các ngôn ngữ server-side khác như Golang.

Cảm ơn các bạn đã đọc bài, hy vọng bài viết hữu ích cho mọi người ạ ^^
63 bình luận
Chia sẻ

Xu hướng

hihi 😃 em đang học html và css, js mà tháng này lười quá :3
@profacson Vâng ạ
@qng171 Quả là cviec thú vị 😆
Tiêu Ngân
ĐẠI BÀNG
2 năm
@qng171 Có ngày họp từ sáng tới chiều và chả code được dòng nào =))
@Tiêu Ngân cả ngày k fix dc cái lỗi, cú quá đi đái phát vào múa finger cái fixed!
tide12253
ĐẠI BÀNG
2 năm
Yêu quá
Quá ngon
Đúng rồi! Lập trình với mình như là công cụ để giải quyết các công việc bất kỳ, nhất là các công cụ lặp đi lặp lại,...!
Rất hữu ích, cảm ơn bác nhiều nhé 😁
Nhiều người bây giờ học lập trình mà toàn thích chạy theo công nghệ mà quên cốt lõi là phải giải quyết vấn đề của mình đang cần xử lý 😃 chẳng cần đao to búa lớn, cái nào làm được việc cứ dùng 😁 Bài viết sẽ hay hơn nếu làm một cái tuts hoàn chỉnh nữa là ngon.
@phucnguyen893 Bạn nhận xét đúng. Thuật toán, cách giải quyết vấn đề quan trọng hơn. Ngôn ngữ lập trình nào cũng vậy thôi, cơ bản là na ná nhau.
@Tiêu Ngân Hì. Không đủ trình để bình phẩm toàn bộ đâu bác. Chém gió đôi lời cho vui thôi.
camivacamiva
ĐẠI BÀNG
2 năm
mình thì chưa biết code, hay dùng excel, mấy cái thao tác lặp lại thì hay dùng con bot auto macro recorder cho nó lặp lại, cũng giúp mình khá nhiều việc
NgoHaiLong
ĐẠI BÀNG
2 năm
Mình đang học, nếu có chỗ nào không hiểu hỏi bạn ở tinhte hay mail nào vậy bạn?
@NgoHaiLong Bạn có thể inbox mình ở facebook.com/qsangp nhé
Hay quá, rồi ga mình đi bạn
Khôn như mày :D
Mình dân ngoại đạo, kiểu như ồ, các ông thật siêu 😁
Trước mình học Excel cũng thấy y xì, làm được cái hàm gì mới mới là thấy hay vãi.
Cười ra nước mắt
3 tiếng 😁 đỉnh bạn ơi
@narutoxboy Dạ chủ yếu cũng search Google, Youtube thôi ạ
Dùng thế nào vậy bác
Biết lập trình kể ra cũng hay nhỉ
hunggh
CAO CẤP
2 năm
30 tuổi học + ở tỉnh lẻ + làm NN nên ngại học vì
già, nhiều thứ vướng bận + tỉnh lẻ ít cơ hội việc làm với nghề này + làm NN, sáng tạo là CHẾT
Tiêu Ngân
ĐẠI BÀNG
2 năm
@hunggh Quan trọng là làm vì mục đích gì, làm vì đam mê, thoả đam mê là được hay làm vì chén cơm manh áo mà đầu tư vào nó. Cái gì cũng có cái giá của nó thôi anh, đầu tư nhiều thì nhận lại trái ngọt cũng nhiều. Tuỳ anh cân nhắc mà chọn lựa cái nào cho mình, bản thân không cảm thấy hối tiếc là được.
@hunggh Bác xem trong công việc và đời sống của bác, những thứ lặp đi lặp lại nhiều lần có không? Nếu có thì IT nó sẽ giúp được bác tiết kiệm thời gian. IT ở đây ko chỉ là code, nó có thể là một công cụ, công nghệ nào đó. Đôi khi nó chỉ là bác tối ưu lại quy trình là có thể tiết kiệm thời gian. Ko nhất thiết phải học code. Nhưng nói thật, code là một loại ngôn ngữ nên biết.
toanitvn
TÍCH CỰC
2 năm
C# htmlagilitypack quét cả diễn đàn luôn 😁
Cười vô mặt
@toanitvn Đúng vậy, cái lib đó mạnh khủng khiếp
dxinh89
ĐẠI BÀNG
2 năm
@toanitvn PHối thêm ChromeDriver thì bá đạo luôn 🙌
toanitvn
TÍCH CỰC
2 năm
@dxinh89 [Fun] Thôi các bác đừng lấy thêm tool nữa kẻo mai tinhte lại tèo thì anh em lại nhọc đấy =)).
Sao ko ráng xíu get luôn số lượng page cho đẹp vậy bác?
Tiêu Ngân
ĐẠI BÀNG
2 năm
Nếu a có đam mê, ngoài tìm kiếm theo nhu cầu a có thể lên Kipalog để đọc các bài viết để tìm thêm kiến thức. Ngoài ra việc crawl dữ liệu như vầy thực tế thì ng quản trị trang web ko ai muốn bị đưa vào tầm ngắm của các crawler cả :V
@Tiêu Ngân Cảm ơn bạn, này mình chỉ làm để phục vụ nội bộ, không có làm crawler trang khác hihi
vitaminmi
ĐẠI BÀNG
2 năm
Cho mình hỏi Tool GA thì GA nghĩa là gì vậy ah, hay chỉ là thích đặt GA thôi ah. Cám ơn ah
@vitaminmi GA là give away ạ, là game tặng quà
GhostRiley
TÍCH CỰC
2 năm
Cái phần link http backend thì chủ thớt đặt như thế nào ấy nhỉ

Xu hướng

Bài mới









  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2024 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: Số 70 Bà Huyện Thanh Quan, P. Võ Thị Sáu, Quận 3, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019