🥳Hãy tham gia Cộng đồng ScrapelessYêu cầu dùng thử miễn phí để truy cập Bộ công cụ quét web mạnh mẽ của chúng tôi!
Quay lại Blog

Bắt đầu với Axios trong Node.js: Hướng dẫn cho người mới bắt đầu

Alex Johnson
Alex Johnson

Senior Web Scraping Engineer

07-Nov-2024

Tất cả những gì chúng ta biết, xử lý các yêu cầu HTTP hiệu quả là rất quan trọng, và một công cụ giúp điều này dễ dàng là Axios. Cho dù bạn đang truy xuất dữ liệu từ API, gửi dữ liệu đến máy chủ hay chỉ đơn giản là trích xuất nội dung từ các trang web, Axios là một công cụ tuyệt vời để hợp lý hóa quy trình.

Hãy cùng đi sâu vào Axios là gì, cách hoạt động của nó và khám phá một số cách sử dụng hiệu quả trong Node.js.

Axios là gì trong Node.js?

Axios là một ứng dụng khách HTTP dựa trên lời hứa được thiết kế cho cả môi trường JavaScript phía máy kháchphía máy chủ. Với Axios, bạn có thể thực hiện các yêu cầu HTTP từ trình duyệt trong các ứng dụng phía trước và từ máy chủ trong các ứng dụng Node.js. Axios tự động chuyển đổi dữ liệu JSON và xử lý nhiều phức tạp trong xử lý yêu cầu-phản hồi, làm cho việc làm việc với API và xử lý dữ liệu trở nên đơn giản.

Axios ban đầu được xây dựng như một ứng dụng khách HTTP dựa trên trình duyệt nhưng đã trở nên cực kỳ phổ biến ở phía máy chủ, đặc biệt là với Node.js. Với cú pháp đơn giản và các tùy chọn tùy chỉnh rộng rãi, Axios đã trở thành một trong những thư viện được lựa chọn hàng đầu cho các nhà phát triển trên toàn thế giới.

Các tính năng chính của Axios:

  1. Dựa trên lời hứa: Vì Axios được xây dựng dựa trên Lời hứa, nó cho phép mã sạch hơn, dễ quản lý hơn bằng cách sử dụng cú pháp async/await. Cách tiếp cận này giúp dễ dàng viết mã đồng bộ mà không cần địa ngục gọi lại, làm cho mã của bạn dễ đọc hơn và dễ bảo trì hơn.

  2. Chuyển đổi dữ liệu tự động: Axios tự động chuyển đổi dữ liệu JSON, đơn giản hóa quá trình gửi và nhận dữ liệu ở định dạng JSON. Khi nó gửi một yêu cầu hoặc nhận một phản hồi ở định dạng JSON, nó sẽ phân tích cú pháp và nối tiếp dữ liệu tự động, cho phép bạn làm việc trực tiếp với các đối tượng JavaScript.

  3. Khả năng tương thích máy khách và máy chủ: Axios hoạt động cả ở phía máy khách (trong trình duyệt) và phía máy chủ (trong Node.js), làm cho nó linh hoạt cho cả phát triển phía trước và phía sau. Khi được sử dụng trong Node.js, Axios đơn giản hóa việc thực hiện các yêu cầu HTTP đến API, thực hiện lấy dữ liệu từ máy chủ đến máy chủ và hơn thế nữa.

  4. Bộ chặn tích hợp: Axios hỗ trợ các bộ chặn yêu cầu và phản hồi, rất hữu ích cho việc xử lý các tác vụ như ghi nhật ký, xử lý lỗi, xác thực hoặc thêm tiêu đề trước khi yêu cầu được gửi hoặc phản hồi được xử lý.

  5. Cấu hình có thể tùy chỉnh: Axios cho phép tùy chỉnh rộng rãi. Ví dụ: bạn có thể đặt các mặc định toàn cầu như tiêu đề hoặc URL cơ sở, giúp dễ dàng cấu hình cho các môi trường khác nhau.

  6. Xử lý lỗi: Axios cung cấp cơ chế xử lý lỗi mạnh mẽ cho phép bạn bắt lỗi dựa trên mã trạng thái được trả về. Bạn có thể xử lý các lỗi của máy khách và máy chủ khác nhau, giúp dễ dàng quản lý xử lý phản hồi.

Các trường hợp sử dụng phổ biến cho Axios trong Node.js

  • Lấy dữ liệu từ API: Axios thường được sử dụng trong Node.js để lấy dữ liệu từ API, làm cho nó lý tưởng để xây dựng các ứng dụng RESTful, đặc biệt là khi bạn cần tương tác với các dịch vụ của bên thứ ba hoặc microservices.

  • Trích xuất web: Axios có thể được sử dụng để lấy nội dung HTML từ các trang web khi trích xuất web, đặc biệt là đối với các trang web tĩnh. Kết hợp với các công cụ như Cheerio, nó cho phép phân tích cú pháp HTML để trích xuất dữ liệu liên quan.

  • Xử lý xác thực: Axios thường được sử dụng trong Node.js để tương tác với các dịch vụ xác thực, chẳng hạn như gửi thông tin xác thực đến API để xác thực và xử lý mã thông báo.

  • Tải lên/Tải xuống tệp: Nó có khả năng xử lý dữ liệu nhị phân cũng như vậy, vì vậy bạn có thể sử dụng nó để tải lên hoặc tải xuống tệp từ máy chủ.

Bạn gặp sự cố với các thách thức trích xuất web và các khối liên tục trên các dự án bạn đang làm việc?
Hãy thử sử dụng Scrapeless để giúp việc trích xuất dữ liệu dễ dàng và hiệu quả, tất cả trong một công cụ mạnh mẽ. Hãy thử miễn phí ngay hôm nay!

Ví dụ sử dụng trong Node.js

Dưới đây là một ví dụ về việc sử dụng Axios trong Node.js để thực hiện yêu cầu GET:

javascript Copy
const axios = require('axios');

async function fetchData() {
  try {
    const response = await axios.get('https://jsonplaceholder.typicode.com/posts');
    console.log(response.data);
  } catch (error) {
    console.error('Error fetching data:', error.message);
  }
}

fetchData();

Mã này minh họa sự đơn giản của việc thực hiện yêu cầu với Axios trong Node.js. response.data chứa dữ liệu thực tế từ API, trong khi error.message xử lý bất kỳ lỗi nào có thể xảy ra, cung cấp một cách tiếp cận hợp lý để xử lý yêu cầu.

Axios là phía máy chủ hay phía máy khách?

Axios là một ứng dụng khách HTTP linh hoạt hoạt động trên cả môi trường máy chủ và máy khách. Đây là cách nó phù hợp với từng môi trường:

  • Phía máy chủ (Node.js): Trong Node.js, Axios có thể thực hiện các yêu cầu HTTP từ máy chủ phía sau. Tính năng này thường được sử dụng để giao tiếp từ máy chủ đến máy chủ, lấy dữ liệu từ API của bên thứ ba và trích xuất các trang web.
  • Phía máy khách (Trình duyệt): Trong các ứng dụng phía trước, Axios xử lý các yêu cầu HTTP, chẳng hạn như lấy và đăng dữ liệu đến/từ API.

Bằng cách sử dụng Axios, bạn nhận được một API thống nhất để xử lý cả yêu cầu HTTP của máy khách và máy chủ, làm cho mã có thể tái sử dụng hơn và giảm nhu cầu học các phương thức yêu cầu khác nhau cho phía trước và phía sau.

Axios có phải là một mô-đun Node không?

Có, Axios là một mô-đun Node. Nó là một thư viện độc lập, có nghĩa là bạn có thể cài đặt nó dễ dàng thông qua npm hoặc yarn trong bất kỳ dự án Node.js nào. Nó không được đóng gói với Node.js theo mặc định nhưng có thể được tích hợp vào bất kỳ dự án nào bằng cách cài đặt nó làm phụ thuộc.

Để cài đặt Axios, bạn có thể sử dụng lệnh sau trong thiết bị đầu cuối của mình:

bash Copy
npm install axios

Sau khi cài đặt, bạn có thể nhập Axios ở đầu tập lệnh của mình với:

javascript Copy
const axios = require('axios');

Mô-đun này nhẹ, nhanh và được thiết kế để xử lý các yêu cầu HTTP mà không làm tăng thêm độ phức tạp cho dự án của bạn.

Cách cài đặt Axios trong Terminal?

Để cài đặt Axios trong môi trường Node.js của bạn, hãy mở thiết bị đầu cuối của bạn và điều hướng đến thư mục gốc của dự án của bạn. Chạy lệnh sau:

bash Copy
npm install axios

Hoặc nếu bạn thích Yarn, bạn có thể sử dụng:

bash Copy
yarn add axios

Sau khi cài đặt, bạn có thể sử dụng nó ngay lập tức trong dự án của mình bằng cách yêu cầu hoặc nhập nó, như đã hiển thị trong phần trước. Việc cài đặt này sẽ thêm Axios làm phụ thuộc vào dự án của bạn, cho phép bạn sử dụng các phương thức của nó để xử lý các yêu cầu HTTP một cách hiệu quả.

Cách sử dụng Axios trong trích xuất web

Để sử dụng hiệu quả Axios trong trích xuất web, hãy làm theo các bước sau để có hướng dẫn đầy đủ, từ thiết lập Axios đến xử lý các thách thức và phân tích cú pháp dữ liệu. Dưới đây là phân tích về cách sử dụng Axios trong trích xuất web:

1. Thiết lập Axios để trích xuất web

Đầu tiên, hãy đảm bảo bạn đã cài đặt Node.jsAxios trong dự án của mình. Bạn có thể cài đặt Axios bằng cách chạy:

bash Copy
npm install axios

Với Axios đã được cài đặt, nó đã sẵn sàng để sử dụng để thực hiện các yêu cầu HTTP đến các trang web.

2. Cách sử dụng cơ bản để lấy nội dung trang web

Khi trích xuất web, mục tiêu chính là lấy nội dung HTML của một trang web. Dưới đây là cách bạn có thể thực hiện một yêu cầu GET đơn giản đến một trang web bằng cách sử dụng Axios:

javascript Copy
const axios = require('axios');

async function fetchHTML(url) {
  try {
    const response = await axios.get(url);
    return response.data; // Nội dung HTML của trang
  } catch (error) {
    console.error(`Error fetching HTML: ${error.message}`);
  }
}

fetchHTML('https://example.com').then(html => console.log(html));

Trong mã này, fetchHTML gửi một yêu cầu GET đến URL được cung cấp và trả về nội dung HTML. Đây là nền tảng để trích xuất dữ liệu từ các trang web tĩnh.

3. Phân tích cú pháp nội dung HTML

Để trích xuất thông tin cụ thể từ HTML, hãy sử dụng một thư viện phân tích cú pháp như Cheerio. Cheerio cho phép bạn truy vấn HTML bằng cú pháp giống như jQuery, giúp dễ dàng nhắm mục tiêu vào các yếu tố. Cài đặt nó bằng cách chạy:

bash Copy
npm install cheerio

Dưới đây là cách bạn có thể sử dụng Cheerio cùng với Axios để trích xuất dữ liệu từ một trang web:

javascript Copy
const axios = require('axios');
const cheerio = require('cheerio');

async function scrapeWebsite(url) {
  try {
    const { data } = await axios.get(url);
    const $ = cheerio.load(data);

    // Ví dụ: Trích xuất tất cả tiêu đề bài viết
    const titles = [];
    $('h2.article-title').each((i, element) => {
      titles.push($(element).text());
    });

    console.log('Scraped Titles:', titles);
  } catch (error) {
    console.error(`Error scraping website: ${error.message}`);
  }
}

scrapeWebsite('https://example.com/articles');

Trong ví dụ này, Axios lấy HTML và Cheerio phân tích cú pháp nó để trích xuất tiêu đề bài viết (h2.article-title trong trường hợp này). Bạn có thể điều chỉnh bộ chọn để nhắm mục tiêu vào các yếu tố khác nhau trên trang.

4. Xử lý tiêu đề và đại lý người dùng

Một số trang web chặn các yêu cầu từ các máy khách không phải trình duyệt. Để bắt chước một trình duyệt thực, hãy bao gồm các tiêu đề như User-Agent trong yêu cầu Axios của bạn. Dưới đây là cách thiết lập tiêu đề:

javascript Copy
const axios = require('axios');

async function fetchWithHeaders(url) {
  try {
    const response = await axios.get(url, {
      headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
      }
    });
    return response.data;
  } catch (error) {
    console.error(`Error with headers: ${error.message}`);
  }
}

fetchWithHeaders('https://example.com').then(html => console.log(html));

Việc thêm tiêu đề có thể giúp ngăn chặn trang web chặn yêu cầu của bạn. Tiêu đề User-Agent khiến yêu cầu của bạn xuất hiện từ một trình duyệt thực.

5. Xử lý Các trang được hiển thị bằng JavaScript

Axios rất lý tưởng cho các trang web tĩnh, nhưng nó không thể thực thi JavaScript. Nếu bạn đang trích xuất các trang có nhiều JavaScript, hãy sử dụng Puppeteer hoặc Playwright để hiển thị đầy đủ trang. Đối với các giải pháp chỉ dành cho Axios, hãy tập trung vào nội dung tĩnh hoặc tìm kiếm các nguồn dữ liệu thay thế như API.

6. Xử lý lỗi và giới hạn tốc độ

Xử lý lỗi rất cần thiết trong trích xuất web để quản lý các sự cố như giới hạn tốc độ hoặc yêu cầu bị chặn. Dưới đây là một ví dụ với cơ chế thử lại cơ bản:

javascript Copy
const axios = require('axios');

async function fetchWithRetries(url, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      const response = await axios.get(url);
      return response.data;
    } catch (error) {
      console.error(`Attempt ${i + 1} failed: ${error.message}`);
      if (i === retries - 1) throw error;
    }
  }
}

fetchWithRetries('https://example.com').then(html => console.log(html));

7. Lưu trữ hoặc xử lý dữ liệu

Sau khi bạn có dữ liệu, hãy lưu nó vào một tệp hoặc cơ sở dữ liệu để phân tích thêm. Ví dụ: bạn có thể sử dụng fs để lưu dữ liệu vào một tệp JSON:

javascript Copy
const fs = require('fs');
const axios = require('axios');
const cheerio = require('cheerio');

async function scrapeAndSave(url) {
  try {
    const { data } = await axios.get(url);
    const $ = cheerio.load(data);
    const results = [];

    // Trích xuất dữ liệu cụ thể
    $('h2.article-title').each((i, element) => {
      results.push($(element).text());
    });

    fs.writeFileSync('data.json', JSON.stringify(results, null, 2));
    console.log('Data saved to data.json');
  } catch (error) {
    console.error(`Error saving data: ${error.message}`);
  }
}

scrapeAndSave('https://example.com/articles');

Trong ví dụ này, dữ liệu được trích xuất được lưu vào data.json, sau đó bạn có thể tải để phân tích.

8. Xử lý các thách thức phổ biến

  • Phát hiện bot: Việc thêm tiêu đề và xử lý cookie có thể khiến các yêu cầu xuất hiện hợp pháp hơn.
  • Giới hạn tốc độ: Sử dụng độ trễ giữa các yêu cầu hoặc triển khai cơ chế thử lại để tránh quá tải máy chủ.
  • IP bị chặn: Xoay IP hoặc sử dụng các dịch vụ proxy để tránh bị chặn khi trích xuất các trang web có các biện pháp chống trích xuất tích cực.

Kết luận

Trong hướng dẫn này, chúng ta đã đề cập đến những điều cần thiết của việc sử dụng Axios trong Node.js để trích xuất web. Bạn đã tìm hiểu về vai trò của Axios như một mô-đun Node.js, cách cài đặt và thiết lập nó, và khám phá các kỹ thuật thực tế như thêm tiêu đề, sử dụng Cheerio để phân tích cú pháp HTML và xử lý các thách thức trích xuất web phổ biến như phát hiện bot và quản lý lỗi.

Đối với các nhà phát triển làm việc với tích hợp API, trích xuất web hoặc thu thập dữ liệu, Axios cung cấp một cách tiếp cận mạnh mẽ, linh hoạt và hiệu quả để thực hiện các yêu cầu HTTP và xử lý phản hồi. Mặc dù lý tưởng cho nội dung tĩnh, việc kết hợp Axios với các công cụ như Puppeteer hoặc Playwright có thể giúp khắc phục các hạn chế đối với nội dung động.

Với những chiến lược này, bạn được trang bị để sử dụng Axios một cách hiệu quả, biến nó trở thành một bổ sung linh hoạt cho bộ công cụ của bất kỳ nhà phát triển nào. Hãy thử nghiệm với các cấu hình khác nhau để tối ưu hóa các cuộc gọi API và các dự án trích xuất web của bạn để đạt được độ tin cậy và hiệu quả.

Tại Scrapeless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định hiện hành và chính sách bảo mật của trang web. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm pháp lý đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động thu thập dữ liệu nào, hãy tham khảo ý kiến ​​cố vấn pháp lý của bạn và xem lại các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.

Bài viết phổ biến nhất

Danh mục