Hướng dẫn cách dùng thư viện axios năm 2024

Việc crawl dữ liệu trên website có nhiều cách và nhiều ngôn ngữ ví dụ với java, python,... bài viết này chúng ta sẽ cùng tìm hiểu cách thu thập điểm thi lớp 10 bằng thư viện Axios của Javascript nhé.

Trước khi vào bài viết thì chúng ta cần biết thư viện Axios là gì?

Thư viện Axios.

Axios là một thư viện HTTP Client dựa trên Promise. Cơ bản thì nó cung cấp một API cho việc xử lý XHR (XMLHttpRequests). Trong bài viết này, chúng ta sẽ tìm hiểu làm thế nào để thực hiện một HTTP request bằng cách sử dụng axios nhé.

Để sử dụng được thư viện này, đầu tiên chúng ta phải cài đặt nó đã.

  • Sử dụng npm: npm install axios --save
  • Sử dụng bower: bower install axios
  • Sử dụng CDN:

Chi tiết về cách dùng thì có thể tìm hiểu thêm ở link github của thư viện này.

Bắt đầu code.

Mình sẽ crawl điểm ở trên trang này nhé.

Phân tích trang web

Khi mình tra cứu SBD như thế này và sử dụng Developer Tool, ở tab Network mục XHR, thì nó sẽ trả về điểm thi từ đường link này.

Nhìn vào link, ta có thể thấy hai giá trị mình đã nhập vào là Số báo danh và Mã xác thực.

Nếu bây giờ mình muốn có được bảng số liệu về điểm thi của cụm này rồi dùng nó để phân tích, dự đoán điểm chuẩn thì làm thế nào ?

Sử dụng thư viện axios.

const axios = require('axios');
var list;
axios.get('https://tracuudiem.danang.gov.vn:8443/tracuu/public/diemthi?capt=BHP6&cot1=090130&cot2=&cot3=&cot4=&cot5=&cot6=&cot7=&page=0&size=3&kyThiId=35')
            .then(function(res) {
                list = res.data;
                console.log(list);
            })
            .catch(function(err) {
                console.log('error at 090130');
            })

Đoạn code phía trên là ví dụ cho việc sử dụng axios.

Kết quả in ra một Object với nhiều keys như hình, nhưng cái mình quan tâm chỉ là những giá trị của key content.

Bây giờ code một chương trình hoàn chỉnh để crawl tất cả các điểm của thí sinh ở cụm thi này nhé.

Ở cụm thi này, theo mình biết là có 549 thí sinh, nên mình sẽ cho một vòng lặp for chạy từ 1 đến 549, sau đó xử lý một chút để cho ra một SBD đúng.

Mình cần lưu lại các giá trị để phân tích nên mình sẽ sử dụng thêm thư viện fs để đọc, ghi file json.

Bước 1: Tạo một file data.json.

Bước 2: Tạo file index.js và viết code.

const axios = require('axios');
const fs = require('fs');
var list;
async function searching()
{
        for(let i = 1; i <= 549; i++)
        {
            // xử lý số báo danh
            var suffix = "";
            if (i < 10)
            {
                suffix += "00" +i;
            } else if ( i < 100)
            {
                suffix += "0" + i;
            } else suffix = i;
            let sbd = "090" + suffix;
            await axios.get('https://tracuudiem.danang.gov.vn:8443/tracuu/public/diemthi?capt=KHKT&cot1='+ sbd+ '&cot2=&cot3=&cot4=&cot5=&cot6=&cot7=&page=0&size=3&kyThiId=35')
            .then(function(res) {
                list = res.data.content;
                // xóa đi một số key không cần thiết.
                delete list[0].id;
                delete list[0].kyThiId;
                delete list[0].ketQua;
                //
                fileStudent.push(list[0]);
                console.log('SBD: ' + sbd + ' done');
            })
            .catch(function(err) {
                console.log('error at ' + sbd);
            })
        }
        // convert mảng object thành string để ghi vào file
        fs.writeFileSync("./data.json", JSON.stringify(fileStudent));
}
function main()
{
    searching();
}
main();

Kết quả in ra màn hình.

Tại sao mình lại sử dụng async-await cho function searching ? Bởi vì quá trình nếu không sử dụng async-await, function sẽ chạy bất đồng bộ, gửi nhiều requests đến server cùng lúc không theo trật tự, server chống bị tấn công DoS sẽ set một limit requests và từ chối trả lời request nếu số requests vượt quá giới hạn, gây ra lỗi như hình dưới đây.

Kết quả

Sau khi đợi chương trình chạy xong thì kiểm tra file data.json

Giờ muốn phân tích với dữ liệu json thì ta cần chuyển chúng qua file excel, mình thường sử dụng trang này.

Tạm kết

Bài viết chỉ là ví dụ để giúp chúng ta thực hành kỹ năng code của mình, không dùng vào những mục đích không chính đáng. Trên đây là cách mình sử dụng thư viện axios của Javascript để crawl điểm thi, hy vọng sẽ giúp ích cho mọi người. Nếu có góp ý gì về code của mình thì hãy bình luận ở bên dưới nhé, rất mong nhận được sự góp ý của mọi người.