Trích xuất dữ liệu Amazon bằng Node.JS - Hướng dẫn JavaScript 2025

Expert Network Defense Engineer
Amazon là một nền tảng thương mại điện tử toàn cầu hàng đầu với dữ liệu sản phẩm có giá trị cho nghiên cứu thị trường và giám sát giá cả. Sử dụng JavaScript và Node.js với Playwright, chúng ta có thể xây dựng một trình thu thập dữ liệu web JavaScript để trích xuất dữ liệu này, nhưng những thách thức như hiển thị JavaScript, phát hiện chống bot và CAPTCHA khiến việc thu thập dữ liệu thủ công trở nên khó khăn.
API Thu thập dữ liệu Amazon của Scrapeless cung cấp một giải pháp nhanh hơn, đáng tin cậy hơn bằng cách xử lý CAPTCHA, proxy và mở khóa trang web, đảm bảo dữ liệu chính xác, thời gian thực mà không bị phát hiện. Hướng dẫn này sẽ bao gồm cả hai cách tiếp cận, cho thấy tại sao Scrapeless là lựa chọn tốt nhất cho việc thu thập dữ liệu Amazon hiệu quả. 🚀
Thách thức trong việc thu thập dữ liệu Amazon
Thu thập dữ liệu từ Amazon đi kèm với một số thách thức do các biện pháp bảo vệ chống bot mạnh mẽ của nó:
- Hiển thị JavaScript: Amazon phụ thuộc nhiều vào JavaScript, khiến việc trích xuất dữ liệu bằng các yêu cầu HTTP đơn giản trở nên khó khăn. Trình thu thập dữ liệu JavaScript sử dụng Playwright hoặc các công cụ tương tự là cần thiết để hiển thị nội dung động.
- Bảo vệ CAPTCHA: Các thách thức CAPTCHA thường xuyên làm gián đoạn việc thu thập dữ liệu và yêu cầu các cơ chế giải quyết để tiếp tục trích xuất dữ liệu.
- Chặn IP & Giới hạn tốc độ: Amazon phát hiện và chặn các yêu cầu lặp đi lặp lại từ cùng một IP, cần phải luân chuyển proxy hoặc các kỹ thuật né tránh khác.
- Thay đổi trang web thường xuyên: Amazon cập nhật cấu trúc trang web của mình thường xuyên, điều này có thể làm hỏng các tập lệnh thu thập dữ liệu và yêu cầu bảo trì liên tục.
Cách xây dựng trình thu thập dữ liệu JavaScript của bạn với Node.js?
Trong ví dụ sau, chúng ta sẽ sử dụng JavaScript để thu thập dữ liệu từ Amazon và lưu trữ dữ liệu đã trích xuất vào một tệp JSON cục bộ.
Chuẩn bị cho việc thu thập dữ liệu
Chúng ta cần thiết lập các công cụ thu thập dữ liệu web Node.js cần thiết ngay từ đầu:
Trong bài viết này, tôi sẽ sử dụng Playwright
, một dự án mã nguồn mở rất năng động với nhiều người đóng góp. Được phát triển bởi Microsoft, nó hỗ trợ nhiều trình duyệt (Chromium, Firefox và WebKit) và nhiều ngôn ngữ lập trình (Node.js, Python, .NET và Java), làm cho nó trở thành một trong những framework thu thập dữ liệu JavaScript phổ biến nhất hiện nay.
Ở đây, hãy đảm bảo phiên bản Node.js của bạn là 18 trở lên, sau đó chạy tập lệnh sau để cài đặt Playwright:
Bash
# pnpm
pnpm create playwright
# yarn
yarn create playwright
# npm
npm init playwright@latest
Thất vọng vì bị chặn web và xây dựng dự án đau đầu?
Tham gia Cộng đồng của chúng tôi và nhận được giải pháp hiệu quả với Bản dùng thử miễn phí!
Bước 1. Kiểm tra trang mục tiêu
Trước khi thu thập dữ liệu, hãy thử truy cập https://www.amazon.com/. Nếu đây là lần đầu tiên bạn truy cập trang web, bạn có thể gặp phải CAPTCHA.

Nhưng đừng lo lắng—chúng ta không cần phải trải qua rắc rối tìm kiếm một công cụ giải quyết CAPTCHA. Thay vào đó, chỉ cần truy cập tên miền Amazon dành riêng cho khu vực của bạn hoặc vị trí proxy của bạn, và bạn sẽ không kích hoạt CAPTCHA.
Ví dụ: hãy truy cập https://www.amazon.co.uk/, tên miền Amazon của Vương quốc Anh. Bạn sẽ thấy trang tải mượt mà. Bây giờ, hãy thử nhập từ khóa sản phẩm mong muốn của bạn vào thanh tìm kiếm ở đầu hoặc truy cập trực tiếp kết quả tìm kiếm thông qua URL, chẳng hạn như:
Bash
https://www.amazon.co.uk/s?k=jacket
Trong URL, giá trị sau /s?k=
đại diện cho từ khóa sản phẩm. Bằng cách truy cập URL ở trên, bạn sẽ thấy các sản phẩm liên quan đến áo sơ mi trên Amazon.
Bây giờ, hãy mở Công cụ dành cho nhà phát triển (F12) để kiểm tra cấu trúc HTML của trang. Sử dụng con trỏ để tô sáng các phần tử và xác định dữ liệu mà chúng ta sẽ cần thu thập sau này.

Bước 2. Viết tập lệnh
Đầu tiên, hãy thêm một đoạn mã ban đầu ở đầu tập lệnh. Mã sau đây lấy đối số tập lệnh đầu tiên làm từ khóa sản phẩm Amazon, sẽ được sử dụng để thu thập dữ liệu sau này:
JavaScript
const productName = process.argv.slice(2);
if (productName.length !== 1) {console.error('product name CLI arguments missing!');
process.exit(2);
}
Tiếp theo, chúng ta cần:
- Nhập Playwright để tương tác với trình duyệt.
- Điều hướng đến trang kết quả tìm kiếm của Amazon.
- Thêm ảnh chụp màn hình để xác minh quyền truy cập thành công.
JavaScript
import playwright from "playwright";
const browser = await playwright.chromium.launch()
const page = await browser.newPage();
await page.goto(`https://www.amazon.co.uk/s?k=${productName}`);
// Thêm ảnh chụp màn hình để gỡ lỗi
await page.screenshot({ path: 'amazon_page.png' })
Bây giờ, chúng ta sẽ sử dụng page.$$
để lấy tất cả các container sản phẩm, lặp qua chúng và trích xuất dữ liệu liên quan. Dữ liệu này sau đó được lưu trữ trong mảng productDataList
và được in ra:
JavaScript
// Lấy tất cả các container kết quả tìm kiếm
const productContainers = await page.$$('div[data-component-type="s-search-result"]')
const productDataList = []
// Trích xuất chi tiết sản phẩm: tiêu đề, xếp hạng, URL hình ảnh và giá cả
for (const product of productContainers) {
async function safeEval(selector, evalFn) {
try {
return await product.$eval(selector, evalFn);
} catch (e) {
return null;
}
}
const title = await safeEval('.s-title-instructions-style > h2 > a > span', node => node.textContent)
const rate = await safeEval('a > i.a-icon.a-icon-star-small > span', node => node.textContent)
const img = await safeEval('span[data-component-type="s-product-image"] img', node => node.getAttribute('src'))
const price = await safeEval('div[data-cy="price-recipe"] .a-offscreen', node => node.textContent)
productDataList.push({ title, rate, img, price })
}
console.log('amazon_product_data_list :', productDataList);
await browser.close();
Chạy tập lệnh bằng:
Bash
node amazon.js jacket
Nếu thành công, bảng điều khiển sẽ in dữ liệu sản phẩm đã trích xuất.

Bước 3. Lưu dữ liệu đã thu thập dưới dạng tệp JSON
Chỉ in dữ liệu ra bảng điều khiển là không đủ để phân tích đúng cách. Hãy lưu dữ liệu đã trích xuất vào một tệp JSON bằng mô-đun fs
của Node.js:
JavaScript
import fs from 'fs'
function saveObjectToJson(obj, filename) {
const jsonString = JSON.stringify(obj, null, 2)
fs.writeFile(filename, jsonString, 'utf8', (err) => {
err ? console.error(err) : console.log(`File saved successfully: ${filename}`);
});
}
saveObjectToJson(productDataList, 'amazon_product_data.json')
Vâng, hãy tìm hiểu toàn bộ tập lệnh:
JavaScript
import playwright from "playwright";
import fs from 'fs'
const productName = process.argv.slice(2);
if (productName.length !== 1) {
console.error('product name CLI arguments missing!');
process.exit(2);
}
const browser = await playwright.chromium.launch()
const page = await browser.newPage();
await page.goto(`https://www.amazon.co.uk/s?k=${productName}`);
// Thêm ảnh chụp màn hình để gỡ lỗi
await page.screenshot({ path: 'amazon_page.png' })
// Lấy tất cả các container kết quả tìm kiếm
const productContainers = await page.$$('div[data-component-type="s-search-result"]')
const productDataList = []
// Trích xuất chi tiết sản phẩm: tiêu đề, xếp hạng, URL hình ảnh và giá cả
for (const product of productContainers) {
async function safeEval(selector, evalFn) {
try {
return await product.$eval(selector, evalFn);
} catch (e) {
return null;
}
}
const title = await safeEval('.s-title-instructions-style > a > h2 > span', node => node.textContent)
const rate = await safeEval('a > i.a-icon.a-icon-star-small > span', node => node.textContent)
const img = await safeEval('span[data-component-type="s-product-image"] img', node => node.getAttribute('src'))
const price = await safeEval('div[data-cy="price-recipe"] .a-offscreen', node => node.textContent)
productDataList.push({ title, rate, img, price })
}
console.log('amazon_product_data_list :', productDataList);
function saveObjectToJson(obj, filename) {
const jsonString = JSON.stringify(obj, null, 2)
fs.writeFile(filename, jsonString, 'utf8', (err) => {
err ? console.error(err) : console.log(`File saved successfully: ${filename}`);
});
}
saveObjectToJson(productDataList, 'amazon_product_data.json')
await browser.close();
Bây giờ, sau khi chạy tập lệnh, dữ liệu không chỉ được in trên bảng điều khiển mà còn được lưu dưới dạng tệp JSON (amazon_product_data.json
).

Tránh bị chặn trong khi thu thập dữ liệu Amazon
Thu thập dữ liệu từ Amazon có thể khó khăn do các biện pháp chống bot nghiêm ngặt của nó, nhưng việc sử dụng Công cụ mở khóa Web của Scrapeless giúp vượt qua các hạn chế này một cách hiệu quả.
Amazon sử dụng các kỹ thuật phát hiện bot như giới hạn tốc độ IP, nhận dạng dấu vân tay trình duyệt và xác minh CAPTCHA để ngăn chặn quyền truy cập tự động. Công cụ mở khóa Web của Scrapeless khắc phục những trở ngại này bằng cách luân chuyển proxy dân cư, bắt chước hành vi của người dùng thực và xử lý việc hiển thị nội dung động.
Bằng cách tích hợp Scrapeless với các trình duyệt không đầu như playwright hoặc Playwright, người dùng có thể thu thập dữ liệu sản phẩm của Amazon mà không bị chặn, đảm bảo quá trình trích xuất dữ liệu liền mạch và hiệu quả.
Thực tiễn tốt nhất và những điều cần xem xét khi thu thập dữ liệu JavaScript
Khi xây dựng trình thu thập dữ liệu web bằng JavaScript, điều quan trọng là phải tối ưu hóa hiệu quả, xử lý nội dung động và tránh những sai lầm phổ biến. Dưới đây là một số thực tiễn tốt nhất và những điều cần xem xét chính:
- Xử lý các trang được hiển thị bằng JavaScript
Nhiều trang web hiện đại tải nội dung một cách động bằng JavaScript. Các yêu cầu HTTP truyền thống (như Axios hoặc Fetch) sẽ không chụp được nội dung đó. Thay vào đó, hãy sử dụng các trình duyệt không đầu như playwright, Playwright hoặc Selenium để hiển thị và trích xuất dữ liệu từ các trang nặng về JavaScript. - Quản lý đồng thời để thu thập dữ liệu nhanh hơn
Chạy trình thu thập dữ liệu theo trình tự có thể chậm. Thực hiện đồng thời bằng cách khởi chạy nhiều tác vụ thu thập dữ liệu song song để cải thiện hiệu suất. Sử dụng async/await với Promises và quản lý hệ thống hàng đợi để cân bằng tải thu thập dữ liệu một cách hiệu quả. - Tôn trọng robots.txt và Chính sách trang web
Trước khi thu thập dữ liệu, hãy kiểm tra tệprobots.txt
của trang web để xác định các quy tắc thu thập dữ liệu của nó. Bỏ qua các quy tắc này có thể dẫn đến việc bị cấm IP hoặc các vấn đề pháp lý. Ngoài ra, hãy xem xét sử dụng luân phiên user-agent và điều tiết yêu cầu để giảm thiểu tác động đến máy chủ đích. - Tránh tường lửa ứng dụng web (WAF)
Các trang web triển khai WAF như Akamai, Cloudflare và PerimeterX để chặn lưu lượng truy cập tự động. Các kỹ thuật như duy trì phiên, né tránh nhận dạng dấu vân tay trình duyệt và các công cụ giải quyết CAPTCHA có thể giúp giảm thiểu việc phát hiện và chặn. - Quản lý URL và khử trùng hiệu quả
Hãy đảm bảo trình thu thập dữ liệu của bạn không truy cập lại cùng một URL nhiều lần bằng cách duy trì một tập hợp URL đã truy cập. Thực hiện các kỹ thuật chuẩn hóa để chuẩn hóa URL và ngăn chặn việc thu thập dữ liệu trùng lặp. - Xử lý phân trang và cuộn vô hạn
Các trang web thường sử dụng phân trang hoặc cuộn vô hạn để tải nội dung một cách động. Xác định cấu trúc phân trang (ví dụ:?page=2
) hoặc sử dụng các trình duyệt không đầu để mô phỏng việc cuộn và trích xuất tất cả nội dung. - Tối ưu hóa việc trích xuất và lưu trữ dữ liệu
Sau khi trích xuất dữ liệu, hãy định dạng dữ liệu một cách chính xác và lưu trữ dữ liệu một cách hiệu quả. Lưu trữ dữ liệu có cấu trúc trong JSON, CSV hoặc cơ sở dữ liệu như MongoDB hoặc PostgreSQL để xử lý và phân tích tốt hơn. - Thu thập dữ liệu phân tán cho việc thu thập dữ liệu quy mô lớn
Đối với các tác vụ thu thập dữ liệu quy mô lớn, hãy phân phối khối lượng công việc trên nhiều máy hoặc các phiên bản đám mây bằng cách sử dụng framework thu thập dữ liệu dựa trên hàng đợi hoặc các giải pháp trình duyệt đám mây. Điều này ngăn ngừa việc quá tải một hệ thống duy nhất và cải thiện khả năng chịu lỗi.
Sử dụng API Thu thập dữ liệu Scrapeless để có giải pháp nhanh hơn, đáng tin cậy hơn
Bằng cách tích hợp Scrapeless với các trình duyệt không đầu như Playwright, người dùng có thể xây dựng trình thu thập dữ liệu bằng JavaScript để trích xuất dữ liệu sản phẩm của Amazon mà không bị chặn, đảm bảo quá trình trích xuất dữ liệu liền mạch và hiệu quả.
Tính năng:
✅ Truy cập ngay lập tức vào dữ liệu mới nhất chỉ với một cuộc gọi API.
✅ Hơn 200 yêu cầu đồng thời mỗi giây với hơn 100 triệu yêu cầu mỗi tháng.
✅ Mỗi yêu cầu mất trung bình 5 giây, đảm bảo truy xuất dữ liệu thời gian thực mà không cần lưu vào bộ nhớ đệm.
✅ Hỗ trợ các quy tắc thu thập dữ liệu tùy chỉnh để đáp ứng các nhu cầu khác nhau
✅ Hỗ trợ thu thập dữ liệu đa nền tảng, ngoài Amazon, nó cũng có thể hỗ trợ các nền tảng thương mại điện tử khác: Shopee, Shein, v.v.
✅ Chỉ trả tiền cho các tìm kiếm thành công
Tại sao chọn Scrapeless?
- Dữ liệu thời gian thực: Đảm bảo danh sách sản phẩm cập nhật và chính xác.
- Mở khóa trang web tích hợp: Tự động bỏ qua các hạn chế và CAPTCHA.
- Tính hợp pháp: Scrapeless cung cấp một cách hợp pháp và tuân thủ để truy cập kết quả tìm kiếm.
- Độ tin cậy: API sử dụng các kỹ thuật tinh vi để tránh bị phát hiện, đảm bảo thu thập dữ liệu không bị gián đoạn.
- Dễ sử dụng: Scrapeless cung cấp một API đơn giản tích hợp dễ dàng với Python, lý tưởng cho các nhà phát triển cần truy cập nhanh vào dữ liệu kết quả tìm kiếm.
- Có thể tùy chỉnh: Bạn có thể điều chỉnh kết quả theo nhu cầu của mình, chẳng hạn như chỉ định loại nội dung (ví dụ: danh sách hữu cơ, quảng cáo, v.v.).
API Thu thập dữ liệu Scrapeless có tốn kém không?
Scrapeless cung cấp một nền tảng thu thập dữ liệu web đáng tin cậy và có khả năng mở rộng với giá cả cạnh tranh (so với Zenrows & Apify), đảm bảo giá trị tuyệt vời cho người dùng của mình:
- Trình duyệt thu thập dữ liệu: Từ 0,09 đô la mỗi giờ
- API Thu thập dữ liệu: Từ 0,8 đô la cho 1k URL
- Công cụ mở khóa Web: 0,20 đô la cho 1k URL
- Công cụ giải quyết CAPTCHA: Từ 0,80 đô la cho 1k URL
- Proxy: 2,80 đô la mỗi GB
Bằng cách đăng ký, bạn có thể tận hưởng giảm giá lên đến giảm giá 20% cho mỗi dịch vụ.
Cách triển khai API Thu thập dữ liệu Amazon của Scrapeless
Nếu bạn muốn trích xuất số ASIN từ các trang sản phẩm của Amazon, Scrapeless cung cấp một cách đơn giản và hiệu quả để làm điều đó. Bằng cách sử dụng API Trình thu thập dữ liệu Amazon của Scrapeless, bạn có thể dễ dàng nhận được số ASIN cùng với các chi tiết sản phẩm chính khác.
Bước 1. Đăng nhập vào Scrapeless.
Bước 2. Nhấp vào API Thu thập dữ liệu > chọn Amazon để vào trang thu thập dữ liệu Shopee.

Bước 3. Dán liên kết đến trang sản phẩm Amazon bạn muốn thu thập dữ liệu vào hộp nhập liệu. Và chọn loại dữ liệu cần thu thập.

Trên trang công cụ, bạn có thể chọn loại dữ liệu cần thu thập:
- Người bán: Thu thập thông tin người bán, bao gồm tên người bán, xếp hạng, thông tin liên hệ, v.v.
- Sản phẩm: Thu thập chi tiết sản phẩm như tiêu đề, giá cả, xếp hạng, nhận xét, v.v.
- Từ khóa: Thu thập các từ khóa liên quan đến sản phẩm để giúp bạn phân tích SEO và xu hướng thị trường của sản phẩm.
Bước 4. Sau khi xác nhận rằng liên kết đầu vào và loại dữ liệu đã chọn chính xác, hãy nhấp vào nút "Bắt đầu thu thập dữ liệu". Hệ thống sẽ bắt đầu thu thập dữ liệu và hiển thị kết quả đã thu thập trên bảng điều khiển ở phía bên phải của trang.

Bước 5. Sau khi hoàn tất quá trình thu thập, bạn có thể xem dữ liệu đã thu thập trong bảng điều khiển ở bên phải. Kết quả sẽ được hiển thị ở định dạng rõ ràng để dễ dàng phân tích.

Nếu bạn cần thu thập các sản phẩm khác, hãy nhấp vào Tiếp tục để nhập liên kết Amazon mới và lặp lại các bước trên!
Bạn cũng có thể trực tiếp tích hợp mã của chúng tôi vào dự án của mình:
Node.js
JavaScript
const https = require('https');
class Payload {
constructor(actor, input) {
this.actor = actor;
this.input = input;
}
}
function sendRequest() {
const host = "api.scrapeless.com";
const url = `https://${host}/api/v1/scraper/request`;
const token = " "; // API Token
const inputData = {
action: "product",
url: " " // Product URL
};
const payload = new Payload("scraper.amazon", inputData);
const jsonPayload = JSON.stringify(payload);
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-token': token
}
};
const req = https.request(url, options, (res) => {
let body = '';
res.on('data', (chunk) => {
body += chunk;
});
res.on('end', () => {
console.log("body", body);
});
});
req.on('error', (error) => {
console.error('Error:', error);
});
req.write(jsonPayload);
req.end();
}
sendRequest();
Python
Python
import json
import requests
class Payload:
def __init__(self, actor, input_data):
self.actor = actor
self.input = input_data
def send_request():
host = "api.scrapeless.com"
url = f"https://{host}/api/v1/scraper/request"
token = " " ## API Token
headers = {
"x-api-token": token
}
input_data = {
"action": "product",
"url": " " ## Product URL
}
payload = Payload("scraper.amazon", input_data)
json_payload = json.dumps(payload.__dict__)
response = requests.post(url, headers=headers, data=json_payload)
if response.status_code != 200:
print("Error:", response.status_code, response.text)
return
print("body", response.text)
if __name__ == "__main__":
send_request()
Golang
Go
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Payload struct {
Actor string `json:"actor"`
Input map[string]any `json:"input"`
}
func sendRequest() error {
host := "api.scrapeless.com"
url := fmt.Sprintf("https://%s/api/v1/scraper/request", host)
token := " " // API Token
headers := map[string]string{"x-api-token": token}
inputData := map[string]any{
"action": "product",
"url": " ", // Product URL
}
payload := Payload{
Actor: "scraper.amazon",
Input: inputData,
}
jsonPayload, err := json.Marshal(payload)
if err != nil {
return err
}
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonPayload))
if err != nil {
return err
}
for key, value := range headers {
req.Header.Set(key, value)
}
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
fmt.Printf("body %s\n", string(body))
return nil
}
func main() {
err := sendRequest()
if err != nil {
fmt.Println("Error:", err)
return
}
}
Kết luận: Cách tốt nhất để thu thập dữ liệu Amazon năm 2025
Việc xây dựng trình thu thập dữ liệu JavaScript với Node.js mang lại quyền kiểm soát đầy đủ quá trình thu thập dữ liệu nhưng đi kèm với những thách thức như xử lý nội dung động, giải quyết CAPTCHA, quản lý proxy và tránh bị phát hiện. Nó đòi hỏi nỗ lực kỹ thuật đáng kể và bảo trì liên tục.
Đối với việc thu thập dữ liệu quy mô lớn, hiệu quả và không bị phát hiện, API của Scrapeless là lựa chọn tốt nhất. Nó loại bỏ sự phức tạp của việc phát hiện bot, giúp việc trích xuất dữ liệu trở nên dễ dàng và có thể mở rộng!
🚀 Hãy thử API Thu thập dữ liệu Amazon của Scrapeless ngay hôm nay để có trải nghiệm thu thập dữ liệu nhanh chóng, đáng tin cậy và không lo lắng!
Tại Scrapless, 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 và chính sách bảo mật trang web hiện hành. 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 đố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 cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét 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.