Làm Chủ Web Scraping với n8n: Quy Trình Tự Động Hóa

Cập nhật lần cuối vào April 15, 2026

Vài tháng trước, một người dùng của chúng tôi đã gửi cho chúng tôi ảnh chụp màn hình một workflow n8n với 14 node, hơn chục tờ ghi chú dán, và dòng tiêu đề chỉ vỏn vẹn: "Help." Họ đã làm theo một hướng dẫn web scraping n8n rất phổ biến, chạy thành công bản demo 10 dòng đẹp mắt trên một trang thử nghiệm, rồi đem đi scrape giá đối thủ thực tế trên 200 trang sản phẩm. Kết quả là gì? Vòng lặp phân trang bị hỏng, hàng rào lỗi 403 xuất hiện, và bộ lập lịch im lặng ngừng chạy ngay sau thứ Ba đầu tiên.

Khoảng cách đó — giữa bản demo và pipeline thực chiến — chính là nơi hầu hết dự án scraping bằng n8n chết yểu. Tôi đã dành nhiều năm xây dựng và làm việc trong lĩnh vực tự động hóa, nên tôi có thể nói thẳng: phần scraping hiếm khi là phần khó nhất. Thứ khiến người ta vướng nhất là mọi thứ sau lần scrape đầu tiên thành công. Phân trang, lập lịch, xử lý anti-bot, làm sạch dữ liệu, xuất file, và — quan trọng nhất — bảo trì khi website đổi giao diện lần thứ ba trong quý này. Hướng dẫn này sẽ đi hết toàn bộ quy trình, từ HTTP Request node đầu tiên đến workflow web scraping n8n chạy định kỳ, sẵn sàng cho production. Và khi cách làm DIY của n8n đi vào ngõ cụt, tôi sẽ chỉ cho bạn cách các công cụ AI như Thunderbit có thể giúp bạn tiết kiệm hàng giờ, thậm chí hàng ngày, khỏi những phiền toái đó.

Web Scraping bằng n8n là gì, và vì sao hầu hết tutorial chỉ mới chạm phần bề mặt?

n8n là một nền tảng tự động hóa workflow mã nguồn mở, ít cần code. Bạn có thể hình dung nó như một khung làm việc trực quan, nơi bạn nối các "node" lại với nhau — mỗi node đảm nhận một việc cụ thể như lấy trang web, phân tích HTML, gửi tin nhắn Slack, ghi vào Google Sheets — rồi ghép chúng thành các quy trình tự động. Không cần viết code nặng, dù khi cần bạn vẫn có thể chèn JavaScript vào.

"n8n web scraping" là việc dùng các node HTTP Request và HTML có sẵn trong n8n (kèm theo các community node) để lấy, phân tích và xử lý dữ liệu website ngay trong workflow tự động đó. Cốt lõi chỉ có hai bước: Fetch (HTTP Request node lấy HTML thô từ một URL) và Parse (HTML node dùng CSS selector để trích xuất những điểm dữ liệu bạn cần — tên sản phẩm, giá, email, hay bất cứ gì).

Nền tảng này đang tăng trưởng rất mạnh: tính đến tháng 4 năm 2026, n8n có , hơn 230.000 người dùng hoạt động, 9.166+ mẫu workflow từ cộng đồng, và gần như mỗi tuần lại có một bản minor release mới. Tháng 3 năm 2025, công ty đã gọi vốn . Rõ ràng đây là một hệ sinh thái rất có đà phát triển.

Nhưng có một khoảng trống mà ít ai nói ra. Tutorial n8n scraping nổi tiếng nhất trên dev.to (do Lakshay Nasa viết, đăng dưới tổ chức "Extract by Zyte") hứa sẽ nói về phân trang ở "Part 2." Và Part 2 thực sự đã ra — nhưng kết luận của chính tác giả là: "N8N gives us a default Pagination Mode inside the HTTP Request node under Options, and while it sounds convenient, it didn't behave reliably in my experience for typical web scraping use cases." Cuối cùng tác giả phải chuyển phần phân trang sang một API trả phí của bên thứ ba. Trong khi đó, người dùng forum n8n vẫn liên tục nhắc đến "pagination, throttling, login" như là điểm khiến scraping bằng n8n "nhanh chóng trở nên phức tạp." Bài viết này được xây để lấp đầy khoảng trống đó.

Vì sao web scraping bằng n8n quan trọng với đội Sales, Ops và Ecommerce

Web scraping với n8n không phải thú vui của dân dev. Nó là một công cụ kinh doanh. hiện ở mức khoảng 1–1,3 tỷ USD vào năm 2025 và được dự báo sẽ đạt 2–2,3 tỷ USD vào năm 2030. Riêng dynamic pricing đã được khoảng áp dụng, và hiện dựa vào alternative data — phần lớn được scrape từ web. McKinsey báo cáo rằng dynamic pricing giúp người dùng đạt .

Đây là điểm mạnh thật sự của n8n: không chỉ là lấy dữ liệu. Mà là chuyện gì xảy ra sau đó. n8n cho phép bạn nối scraping với các hành động phía sau — cập nhật CRM, cảnh báo Slack, xuất spreadsheet, phân tích bằng AI — tất cả trong một workflow duy nhất.

Trường hợp sử dụngAi hưởng lợiBạn scrape gìKết quả kinh doanh
Tạo leadĐội salesDanh bạ doanh nghiệp, trang liên hệĐổ lead đủ tiêu chuẩn vào CRM
Theo dõi giá đối thủĐội vận hành ecommerceTrang listing sản phẩmĐiều chỉnh giá theo thời gian thực
Theo dõi listing bất động sảnMôi giới bất động sảnZillow, Realtor, các site MLS địa phươngPhát hiện listing mới trước đối thủ
Nghiên cứu thị trườngĐội marketingSite review, forum, tin tứcNhận diện xu hướng và cảm nhận khách hàng
Theo dõi tồn kho nhà cung cấp/SKUVận hành chuỗi cung ứngTrang sản phẩm của nhà cung cấpTránh hết hàng, tối ưu mua hàng

Dữ liệu cho thấy ROI là có thật: dự định tăng đầu tư AI trong năm 2025, và việc nuôi dưỡng lead tự động đã được chứng minh giúp chỉ trong chín tháng. Nếu đội của bạn vẫn còn copy-paste từ website sang spreadsheet, bạn đang bỏ lại tiền trên bàn.

Bộ công cụ web scraping trong n8n: các node cốt lõi và giải pháp hiện có

Trước khi xây bất cứ thứ gì, bạn cần biết trong “hộp đồ nghề” có gì. Đây là những node n8n thiết yếu cho web scraping:

  • HTTP Request node: Lấy HTML thô từ bất kỳ URL nào. Hoạt động như trình duyệt gửi yêu cầu trang, nhưng trả về mã nguồn thay vì hiển thị trang. Hỗ trợ GET/POST, header, batching, và (về lý thuyết) cả phân trang tích hợp.
  • HTML node (trước đây là "HTML Extract"): Phân tích HTML bằng CSS selector để lấy ra dữ liệu cụ thể — tiêu đề, giá, liên kết, ảnh, hay bất cứ gì bạn cần.
  • Code node: Cho phép bạn viết các đoạn JavaScript để làm sạch dữ liệu, chuẩn hóa URL, loại trùng và xử lý logic tùy biến.
  • Edit Fields (Set) node: Sắp xếp lại hoặc đổi tên các trường dữ liệu cho node phía sau.
  • Split Out node: Tách mảng thành từng item riêng lẻ để xử lý.
  • Convert to File node: Xuất dữ liệu có cấu trúc ra CSV, JSON, v.v.
  • Loop Over Items node: Duyệt qua danh sách (rất quan trọng cho phân trang — sẽ nói kỹ hơn bên dưới).
  • Schedule Trigger: Kích hoạt workflow theo lịch cron.
  • Error Trigger: Báo cho bạn khi workflow bị lỗi (rất cần cho production).

Với các site render bằng JavaScript hoặc có lớp bảo vệ anti-bot mạnh, bạn sẽ cần community node:

Cách tiếp cậnPhù hợp nhất choMức độ kỹ năngXử lý site render bằng JSXử lý anti-bot
n8n HTTP Request + HTML nodesSite tĩnh, APICơ bản–Trung cấpKhôngThủ công (header, proxy)
n8n + ScrapeNinja/Firecrawl community nodeSite động / có bảo vệTrung cấpTích hợp sẵn (xoay proxy, CAPTCHA)
n8n + Headless Browser (Puppeteer)Tương tác JS phức tạpNâng caoMột phần (tùy cấu hình)
Thunderbit (AI Web Scraper)Mọi site, người dùng không chuyên kỹ thuậtCơ bảnCó (Browser hoặc Cloud mode)Tích hợp sẵn (kế thừa session trình duyệt hoặc xử lý trên cloud)

Tính đến v2.15.1, n8n không có node headless browser gốc. Mọi lần scrape site render bằng JS đều cần community node hoặc API bên ngoài.

Nói nhanh về Thunderbit: đây là một dùng AI do đội chúng tôi xây dựng. Bạn chỉ cần bấm "AI Suggest Fields", rồi "Scrape", và dữ liệu có cấu trúc sẽ được trả về — không cần CSS selector, không cần cấu hình node, không cần bảo trì. Trong bài này tôi sẽ chỉ cho bạn chỗ nào Thunderbit phù hợp, và chỗ nào n8n vẫn là lựa chọn tốt hơn.

Từng bước: xây workflow web scraping đầu tiên trong n8n

Sau khi đã nắm bộ công cụ, đây là cách xây một web scraper n8n chạy được từ con số 0. Tôi sẽ dùng một trang danh sách sản phẩm làm ví dụ — kiểu dữ liệu bạn thật sự muốn scrape để theo dõi giá hoặc nghiên cứu đối thủ.

Trước khi bắt đầu:

  • Độ khó: Cơ bản–Trung cấp
  • Thời gian cần: Khoảng 20–30 phút
  • Bạn cần: n8n (self-hosted hoặc Cloud), một URL mục tiêu, trình duyệt Chrome (để tìm CSS selector)

Bước 1: Tạo workflow mới và thêm Manual Trigger

Mở n8n, bấm "New Workflow", đặt tên dễ hiểu — ví dụ "Competitor Price Scraper." Kéo vào một node Manual Trigger. (Sau này ta sẽ đổi sang schedule trigger.)

Bạn sẽ thấy một node duy nhất trên canvas, sẵn sàng chạy khi bạn bấm "Test Workflow."

Bước 2: Lấy trang bằng HTTP Request node

Thêm node HTTP Request và nối nó với Manual Trigger. Đặt method là GET và nhập URL mục tiêu của bạn (ví dụ: https://example.com/products).

Bây giờ đến bước quan trọng mà hầu hết tutorial bỏ qua: thêm header User-Agent trông giống thật. Mặc định, n8n gửi axios/xx làm user agent — thứ này lộ ngay là bot. Trong mục "Headers", thêm:

Tên HeaderGiá trị
User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Nếu bạn scrape nhiều URL, hãy bật Batching (trong Options) và đặt thời gian chờ 1–3 giây giữa các request. Việc này giúp tránh chạm vào rate limit.

Chạy node. Bạn sẽ thấy HTML thô trong bảng output.

Bước 3: Phân tích dữ liệu bằng HTML node

Nối một node HTML vào output của HTTP Request. Chọn operation là Extract HTML Content.

Để tìm CSS selector phù hợp, mở trang mục tiêu trong Chrome, nhấp chuột phải vào dữ liệu bạn muốn (ví dụ tiêu đề sản phẩm), rồi chọn "Inspect." Trong Elements panel, nhấp chuột phải vào phần tử HTML đang được highlight và chọn "Copy → Copy selector."

Cấu hình các giá trị extract như sau:

KeyCSS SelectorGiá trị trả về
product_name.product-titleText
price.price-currentText
url.product-linkAttribute: href

Chạy node. Bạn sẽ thấy một bảng dữ liệu có cấu trúc — tên sản phẩm, giá và URL — trong output.

Bước 4: Làm sạch và chuẩn hóa với Code node

Dữ liệu scrape thô thường rất lộn xộn. Giá có thể dính khoảng trắng thừa, URL có thể là đường dẫn tương đối, và các trường text có thể có ký tự xuống dòng ở cuối. Thêm node Code và nối nó với HTML node.

Dưới đây là một đoạn JavaScript đơn giản để dọn dữ liệu:

1return items.map(item => {
2  const d = item.json;
3  return {
4    json: {
5      product_name: (d.product_name || '').trim(),
6      price: parseFloat((d.price || '').replace(/[^0-9.]/g, '')),
7      url: d.url && d.url.startsWith('http') ? d.url : `https://example.com${d.url}`
8    }
9  };
10});

Bước này rất cần nếu bạn muốn dữ liệu đạt chuẩn production. Bỏ qua nó là spreadsheet của bạn sẽ đầy những dòng kiểu "$ 29.99\n".

Bước 5: Xuất sang Google Sheets, Airtable hoặc CSV

Nối node Google Sheets (hoặc Airtable, hoặc Convert to File nếu muốn CSV). Xác thực bằng tài khoản Google của bạn, chọn spreadsheet và sheet, rồi map các field từ output của Code node sang header cột.

Chạy toàn bộ workflow. Bạn sẽ thấy dữ liệu sạch và có cấu trúc đổ vào spreadsheet.

Lưu ý thêm: sang Google Sheets, Airtable, Notion và Excel mà không cần set up node nào. Nếu bạn không cần chuỗi workflow đầy đủ mà chỉ cần dữ liệu, đó là một lối tắt rất hữu ích.

Phần mà mọi tutorial web scraping n8n đều bỏ qua: workflow phân trang hoàn chỉnh

Phân trang là khoảng trống số 1 trong nội dung scraping của n8n — và cũng là nguồn gây bực bội số 1 trên forum cộng đồng n8n.

Có hai kiểu phân trang chính:

  1. Phân trang theo click / tăng dần URL — các trang như ?page=1, ?page=2, v.v.
  2. Infinite scroll — nội dung tải ra khi bạn cuộn xuống (như Twitter, Instagram, hoặc nhiều catalog sản phẩm hiện đại).

Phân trang theo click trong n8n (tăng URL bằng Loop node)

Tùy chọn Pagination tích hợp trong menu Options của HTTP Request node nghe có vẻ rất tiện. Nhưng trong thực tế nó không ổn định. Tác giả tutorial n8n scraping phổ biến nhất (Lakshay Nasa) đã thử và viết rằng: "it didn't behave reliably in my experience." Người dùng forum báo cáo rằng nó , , và không nhận ra trang cuối.

n8n-pagination-chain-workflow.webp

Cách ổn định hơn là: tạo danh sách URL rõ ràng trong Code node, sau đó lặp qua chúng bằng Loop Over Items.

Làm như sau:

  1. Thêm Code node để tạo URL trang:
1const base = 'https://example.com/products';
2const totalPages = 10; // hoặc phát hiện động
3return Array.from({length: totalPages}, (_, i) => ({
4  json: { url: `${base}?page=${i + 1}` }
5}));
  1. Nối node Loop Over Items để duyệt qua danh sách.
  2. Bên trong vòng lặp, thêm HTTP Request node (đặt URL thành {{ $json.url }}), rồi đến HTML node để parse.
  3. Thêm node Wait (1–3 giây, ngẫu nhiên) bên trong vòng lặp để tránh lỗi 429 rate limit.
  4. Sau vòng lặp, gom kết quả lại và xuất sang Google Sheets hoặc CSV.

Chuỗi đầy đủ: Code (build URLs) → Loop Over Items → HTTP Request → HTML → Wait → (loop back) → Aggregate → Export.

Một lưu ý quan trọng: node Loop Over Items có khiến vòng lặp lồng nhau bỏ sót item một cách im lặng. Nếu bạn vừa phân trang vừa enrich subpage, hãy test cẩn thận — số lượng "done" có thể không khớp với số item đầu vào.

Phân trang infinite scroll: vì sao các node tích hợp sẵn của n8n gặp khó

Trang infinite scroll tải nội dung bằng JavaScript khi bạn cuộn. HTTP Request node chỉ lấy HTML ban đầu — nó không thể chạy JavaScript hay kích hoạt hành động cuộn. Bạn có hai lựa chọn:

  • Dùng community node headless browser (ví dụ: hoặc ) để render trang và mô phỏng cuộn.
  • Dùng scraping API (ScrapeNinja, Firecrawl, ZenRows) với tính năng render JS.

Cả hai đều làm độ phức tạp tăng mạnh. Mỗi site có thể mất 30–60 phút hoặc hơn để set up, chưa kể bảo trì sau đó.

Thunderbit xử lý phân trang mà không cần cấu hình

Tôi có thiên vị một chút, nhưng sự khác biệt là rất rõ:

Khả năngn8n (Workflow DIY)Thunderbit
Phân trang theo clickCần tự set up loop node, tăng URL thủ côngTự động — phát hiện và đi theo phân trang
Trang infinite scrollCần headless browser + community nodeCó sẵn, không cần cấu hình
Công sức set up30–60 phút mỗi site2 cú nhấp
Số trang mỗi batchTuần tự (một trang một lần)50 trang cùng lúc (Cloud Scraping)

Nếu bạn đang scrape 200 trang sản phẩm trải trên 10 danh sách có phân trang, n8n sẽ ngốn của bạn cả buổi chiều. Thunderbit chỉ mất khoảng hai phút. Điều đó không phải để chê n8n — đơn giản là mỗi công cụ hợp với một kiểu việc khác nhau.

Cài một lần, chạy mãi: pipeline web scraping n8n kích hoạt bằng cron

Scraping một lần thì hữu ích, nhưng sức mạnh thật sự của web scraping n8n nằm ở việc thu thập dữ liệu tự động, lặp lại theo lịch. Trớ trêu là gần như không có tutorial n8n scraping nào nói về Schedule Trigger cho scraping — dù đây là một trong những tính năng được cộng đồng yêu cầu nhiều nhất.

Xây pipeline theo dõi giá hằng ngày

Thay Manual Trigger bằng node Schedule Trigger. Bạn có thể dùng giao diện n8n ("Every day at 8:00 AM") hoặc biểu thức cron (0 8 * * *).

Chuỗi workflow đầy đủ:

  1. Schedule Trigger (mỗi ngày lúc 8 giờ sáng)
  2. Code node (tạo URL có phân trang)
  3. Loop Over Items → HTTP Request → HTML → Wait (scrape toàn bộ trang)
  4. Code node (làm sạch dữ liệu, chuẩn hóa giá)
  5. Google Sheets (thêm dòng mới)
  6. IF node (có giá nào thấp hơn ngưỡng không?)
  7. Slack (gửi cảnh báo nếu có)

Bên cạnh đó, hãy dựng thêm một workflow Error Trigger để tự chạy khi có lần thực thi nào thất bại và ping Slack. Nếu không, khi selector bị hỏng (và chuyện đó chắc chắn sẽ xảy ra), bạn chỉ phát hiện ra sau ba tuần khi báo cáo trống rỗng.

Hai yêu cầu không quá rõ ràng nhưng rất quan trọng:

  • n8n phải chạy 24/7. Nếu bạn self-host trên laptop thì đóng máy là schedule không chạy nữa. Hãy dùng server, Docker hoặc n8n Cloud.
  • Sau mỗi lần chỉnh workflow, hãy tắt workflow rồi bật lại. n8n Cloud có là bộ lập lịch có thể tự động gỡ đăng ký sau khi sửa, mà không báo lỗi gì.

Xây pipeline trích xuất lead hằng tuần

Cùng mô hình đó, chỉ khác mục tiêu: Schedule Trigger (mỗi thứ Hai lúc 9 giờ sáng) → HTTP Request (business directory) → HTML (lấy tên, số điện thoại, email) → Code (loại trùng, chuẩn hóa định dạng) → đẩy sang Airtable hoặc HubSpot.

n8n-vs-thunderbit-scheduled-scraping.webp

Chi phí bảo trì là phần thường bị bỏ quên ở đây. Nếu site danh bạ đổi giao diện, CSS selector của bạn sẽ hỏng và workflow có thể lỗi trong im lặng. HasData ước tính rằng thời gian build ban đầu nên được dành cho bảo trì định kỳ mỗi năm trong mọi pipeline dựa trên selector. Khi bạn phải duy trì khoảng 20 site, gánh nặng đó là có thật.

Scheduled Scraper của Thunderbit: lựa chọn không cần code

Scheduled Scraper của Thunderbit cho phép bạn mô tả tần suất bằng ngôn ngữ tự nhiên (ví dụ: "every Monday at 9 AM"), nhập URL và bấm "Schedule." Nó chạy trên cloud — không cần hosting, không cần biểu thức cron, không có chuyện tự động mất đăng ký ngầm.

Hạng mụcWorkflow Scheduled của n8nThunderbit Scheduled Scraper
Thiết lập lịchBiểu thức cron hoặc giao diện schedule của n8nMô tả bằng ngôn ngữ tự nhiên
Làm sạch dữ liệuCần Code node thủ côngAI tự động làm sạch/gán nhãn/dịch
Điểm xuất dữ liệuCần node tích hợpGoogle Sheets, Airtable, Notion, Excel (miễn phí)
Yêu cầu hostingSelf-hosted hoặc n8n CloudKhông cần — chạy trên cloud
Bảo trì khi site đổiSelector hỏng, cần sửa thủ côngAI đọc lại site từ đầu mỗi lần

Dòng cuối cùng là quan trọng nhất. Người dùng forum nói rất thẳng: "most of them are fine until a site changes its layout." Cách tiếp cận AI của Thunderbit loại bỏ nỗi đau đó vì nó không phụ thuộc vào CSS selector cố định.

Khi web scraper n8n bị chặn: hướng dẫn xử lý anti-bot

Bị chặn là nỗi bực bội số 1 sau phân trang. Lời khuyên quen thuộc — "thêm header User-Agent" — cũng giống như dùng cánh cửa lưới để chặn bão.

Theo Imperva 2025 Bad Bot Report, , và trong số đó là độc hại. Các nhà cung cấp anti-bot (Cloudflare, Akamai, DataDome, HUMAN, PerimeterX) đã đáp trả bằng TLS fingerprinting, JavaScript challenge và phân tích hành vi. HTTP Request node của n8n, vốn dùng thư viện Axios bên dưới, tạo ra một TLS fingerprint rất đặc trưng, khác với trình duyệt thật và khá dễ nhận ra. Đổi User-Agent không giúp gì nhiều — hash đã tố bạn trước khi bất kỳ HTTP header nào được đọc.

Sơ đồ quyết định khi gặp anti-bot

Đây là khung xử lý có hệ thống — không chỉ là "thêm User-Agent":

Request bị chặn?

  • 403 Forbidden → Thêm User-Agent + Accept headers (xem Bước 2 ở trên) → Vẫn bị chặn?
    • → Thêm xoay vòng residential proxy → Vẫn bị chặn?
      • → Chuyển sang scraping API (ScrapeNinja, Firecrawl, ZenRows) hoặc community node headless browser
      • Không → Tiếp tục
    • Không → Tiếp tục
  • Xuất hiện CAPTCHA → Dùng scraping API có sẵn giải CAPTCHA (ví dụ: )
  • Phản hồi rỗng (nội dung render bằng JS) → Dùng community node headless browser hoặc scraping API có render JS
  • Bị giới hạn tốc độ (lỗi 429) → Bật batching trên HTTP Request node, đặt thời gian chờ 2–5 giây giữa các batch, giảm độ đồng thời

Thêm một lỗi cần lưu ý: n8n có khiến HTTP Request node không thể tunnel HTTPS qua HTTP proxy đúng cách. Thư viện Axios sẽ thất bại ở TLS handshake, dù curl trong cùng container vẫn chạy bình thường. Nếu bạn đang dùng proxy mà gặp lỗi kết nối khó hiểu, rất có thể đây là nguyên nhân.

Vì sao Thunderbit tránh được phần lớn rắc rối anti-bot

Thunderbit có hai chế độ scrape:

  • Browser Scraping: Chạy ngay trong trình duyệt Chrome thật của bạn, kế thừa cookie phiên làm việc, trạng thái đăng nhập và browser fingerprint. Cách này vượt qua phần lớn lớp anti-bot vốn chặn request từ server — vì request đó chính là request từ một trình duyệt thật.
  • Cloud Scraping: Với các site công khai, cloud của Thunderbit xử lý anti-bot ở quy mô lớn — .

Nếu bạn đang tốn nhiều thời gian đấu với Cloudflare hơn là phân tích dữ liệu, đây là lựa chọn thực tế hơn.

Quan điểm thẳng thắn: khi nào web scraping bằng n8n hiệu quả — và khi nào nên dùng công cụ khác

n8n là một nền tảng rất tốt. Nhưng nó không phải công cụ phù hợp cho mọi bài toán scraping, và không phải bài viết so sánh nào cũng dám nói thật điều này. Người dùng trên forum thậm chí còn hỏi: "how difficult is it to create a web scraper with n8n?""which scraping tool works best with n8n?"

Khi web scraping n8n phát huy tối đa

  • Workflow nhiều bước kết hợp scraping với xử lý phía sau — cập nhật CRM, cảnh báo Slack, phân tích AI, ghi vào database. Đây là thế mạnh cốt lõi của n8n.
  • Các trường hợp scraping chỉ là một node trong chuỗi tự động hóa lớn hơn — scrape → enrich → filter → push vào CRM.
  • Người dùng có kỹ thuật quen với CSS selector và logic theo node.
  • Tình huống cần biến đổi dữ liệu tùy biến giữa bước scrape và bước lưu trữ.

Khi web scraping n8n bắt đầu khó chịu

  • Người dùng không chuyên kỹ thuật chỉ cần dữ liệu thật nhanh. Việc set up node, tìm CSS selector, và vòng lặp debug khá dốc với người làm business.
  • Site có bảo vệ anti-bot mạnh. Proxy và API bên ngoài làm tăng chi phí lẫn độ phức tạp.
  • Bảo trì khi layout website đổi. CSS selector hỏng, workflow chết trong im lặng.
  • Scrape hàng loạt nhiều loại site khác nhau. Mỗi site lại cần cấu hình selector riêng.
  • Enrich subpage. Phải xây thêm workflow con trong n8n.

So sánh n8n vs. Thunderbit vs. Python script

Yếu tốScraping DIY bằng n8nThunderbitPython Script
Kỹ năng kỹ thuật cần cóTrung cấp (node + CSS selector)Không cần (AI gợi ý field)Cao (lập trình)
Thời gian set up cho site mới30–90 phútKhoảng 2 phút1–4 giờ
Xử lý anti-botThủ công (header, proxy, API)Tích hợp sẵn (browser/cloud mode)Thủ công (thư viện)
Bảo trì khi site đổiTự sửa selectorGần như bằng 0 — AI tự thích ứngTự sửa code
Hỗ trợ workflow nhiều bướcRất tốt (điểm mạnh cốt lõi)Xuất sang Sheets/Airtable/NotionCần code tùy biến
Chi phí khi scale lớnChi phí hosting n8n + proxy/APIDựa trên credit (~1 credit mỗi dòng)Chi phí server + proxy
Enrich subpageThủ công — phải tạo workflow con riêngScrape subpage chỉ với 1 cú nhấpTự viết script

Kết luận: dùng n8n khi scraping chỉ là một bước trong chuỗi tự động hóa nhiều tầng. Dùng Thunderbit khi bạn cần dữ liệu thật nhanh mà không muốn tự build workflow. Dùng Python khi bạn cần kiểm soát tối đa và có nguồn lực dev. Chúng không phải đối thủ — chúng bổ trợ cho nhau.

n8n-thunderbit-python-comparison.webp

Những workflow web scraping n8n thực tế bạn có thể sao chép ngay

Người dùng forum cứ hỏi mãi: "Has anyone chained these into multi-step workflows?" Dưới đây là ba workflow cụ thể — các chuỗi node thực tế mà bạn có thể tự dựng ngay hôm nay.

Workflow 1: Theo dõi giá đối thủ trong ecommerce

Mục tiêu: Theo dõi giá đối thủ mỗi ngày và nhận cảnh báo khi giá giảm.

Chuỗi node: Schedule Trigger (hằng ngày, 8 AM) → Code (tạo URL phân trang) → Loop Over Items → HTTP Request → HTML (lấy tên sản phẩm, giá, tình trạng còn hàng) → Wait (2s) → (quay lại vòng lặp) → Code (làm sạch dữ liệu, chuẩn hóa giá) → Google Sheets (thêm dòng) → IF (giá thấp hơn ngưỡng?) → Slack (gửi cảnh báo)

Độ phức tạp: 8–10 node, mất 30–60 phút để set up cho mỗi site đối thủ.

Lối tắt với Thunderbit: Scheduled Scraper của Thunderbit + có thể cho kết quả tương tự trong vài phút, với xuất dữ liệu miễn phí sang Google Sheets.

Workflow 2: Pipeline tạo lead cho sales

Mục tiêu: Scrape một business directory hằng tuần, làm sạch và phân loại lead, rồi đẩy vào CRM.

Chuỗi node: Schedule Trigger (hằng tuần, thứ Hai 9 AM) → HTTP Request (trang listing của directory) → HTML (lấy tên, số điện thoại, email, địa chỉ) → Code (loại trùng, chuẩn hóa định dạng) → node OpenAI/Gemini (phân loại theo ngành) → node HubSpot (tạo contact)

Lưu ý: n8n có node gốc — rất hữu ích để đẩy dữ liệu vào CRM. Nhưng các bước scraping và làm sạch vẫn phải tự tìm CSS selector bằng tay.

Lối tắt với Thunderbit: và Phone Number Extractor miễn phí của Thunderbit có thể lấy thông tin liên hệ chỉ với 1 cú nhấp mà không cần build workflow. AI labeling còn có thể phân loại lead ngay khi trích xuất. Người dùng không cần cả chuỗi tự động hóa đầy đủ có thể bỏ qua hẳn phần setup n8n.

Workflow 3: Theo dõi listing mới bất động sản

Mục tiêu: Phát hiện listing mới trên Zillow hoặc Realtor.com mỗi tuần và gửi email tổng hợp.

Chuỗi node: Schedule Trigger (hằng tuần) → HTTP Request (listing pages) → HTML (lấy địa chỉ, giá, số phòng ngủ, link) → Code (làm sạch dữ liệu) → Google Sheets (thêm vào) → Code (so sánh với dữ liệu tuần trước, đánh dấu listing mới) → IF (có listing mới không?) → Gmail/SendGrid (gửi digest)

Lưu ý: Thunderbit có — không cần CSS selector. Người dùng cần cả chuỗi tự động hóa (scrape → compare → alert) sẽ hưởng lợi từ n8n; người dùng chỉ cần dữ liệu listing thì Thunderbit là đủ.

Để lấy thêm cảm hứng workflow, thư viện cộng đồng của n8n có các template về , , và .

Mẹo để pipeline web scraping n8n chạy mượt

Scraping cho production là 20% xây dựng và 80% bảo trì.

Dùng batching và độ trễ để tránh rate limit

Bật batching trên HTTP Request node và đặt thời gian chờ 1–3 giây giữa các batch. Gửi request đồng thời là cách nhanh nhất để bị chặn IP. Một chút kiên nhẫn ở đây sẽ giúp bạn đỡ rất nhiều đau đầu về sau.

Theo dõi executions để phát hiện lỗi âm thầm

Dùng tab Executions của n8n để kiểm tra các lần chạy lỗi. Dữ liệu scrape có thể trả về rỗng mà không báo gì nếu site đổi layout — workflow vẫn "thành công" nhưng spreadsheet toàn ô trống.

Thiết lập một workflow Error Trigger để kích hoạt khi bất kỳ lần thực thi nào thất bại và gửi cảnh báo Slack hoặc email. Đây là yêu cầu bắt buộc với pipeline production.

Lưu CSS selector bên ngoài để dễ cập nhật

Hãy giữ CSS selector trong Google Sheet hoặc environment variables của n8n để có thể cập nhật mà không cần sửa trực tiếp workflow. Khi site đổi layout, bạn chỉ cần chỉnh selector ở một chỗ.

Biết khi nào nên chuyển sang scraper dùng AI

Nếu bạn liên tục phải cập nhật CSS selector, vật lộn với anti-bot, hoặc dành nhiều thời gian để bảo trì scraper hơn là dùng dữ liệu, hãy cân nhắc một công cụ AI như — công cụ đọc lại site từ đầu mỗi lần và tự thích ứng. Cách kết hợp theo kiểu hoạt động rất tốt: Thunderbit xử lý lớp trích xuất mỏng manh (phần hay hỏng mỗi khi site đổi một thẻ <div>), xuất dữ liệu sang Google Sheets hoặc Airtable, rồi n8n nhận các dòng mới qua trigger gốc của Sheets/Airtable để làm phần điều phối — cập nhật CRM, cảnh báo, logic điều kiện, phân phối đa hệ thống.

Kết luận: xây pipeline phù hợp với đội của bạn

Web scraping bằng n8n rất mạnh khi bạn cần scraping như một bước trong một workflow tự động hóa lớn hơn. Nhưng nó đòi hỏi thiết lập kỹ thuật, bảo trì liên tục và sự kiên nhẫn với cấu hình phân trang, anti-bot và lịch chạy. Hướng dẫn này đã đi qua toàn bộ quy trình: workflow đầu tiên, phân trang (phần mà mọi tutorial đều bỏ qua), lập lịch, xử lý anti-bot, đánh giá thẳng thắn về chỗ n8n phù hợp, và các workflow thực tế bạn có thể copy.

Tôi nhìn nó như thế này:

  • Dùng n8n khi scraping là một phần của chuỗi tự động hóa nhiều bước — cập nhật CRM, cảnh báo Slack, enrich bằng AI, định tuyến điều kiện.
  • Dùng khi bạn cần dữ liệu nhanh mà không muốn xây workflow — AI lo phần gợi ý field, phân trang, anti-bot và export chỉ với 2 cú nhấp.
  • Dùng Python khi bạn cần kiểm soát tối đa và có nguồn lực dev.

Và thật lòng mà nói, setup tốt nhất cho nhiều đội là dùng cả hai: Thunderbit cho phần trích xuất, n8n cho phần điều phối. Nếu bạn muốn xem scraping bằng AI so với workflow n8n của mình khác nhau thế nào, cho phép bạn thử ở quy mô nhỏ — và cài trong vài giây. Nếu muốn xem video hướng dẫn và ý tưởng workflow, hãy ghé .

Thử Thunderbit để web scraping bằng AI

Câu hỏi thường gặp

n8n có thể scrape các website nặng JavaScript không?

Không, nếu chỉ dùng HTTP Request node tích hợp sẵn. HTTP Request node chỉ lấy HTML thô và không thể chạy JavaScript. Với site render bằng JS, bạn cần community node như hoặc tích hợp scraping API (ScrapeNinja, Firecrawl) có render JavaScript phía server. Thunderbit xử lý site nặng JS một cách tự nhiên ở cả chế độ Browser và Cloud scraping.

Web scraping bằng n8n có miễn phí không?

Bản self-host của n8n là miễn phí và mã nguồn mở. n8n Cloud trước đây có gói miễn phí, nhưng tính đến tháng 4 năm 2026, họ chỉ còn trial 14 ngày — sau đó gói bắt đầu từ 24 USD/tháng cho 2.500 lần thực thi. Scrape các site được bảo vệ cũng có thể cần dịch vụ proxy trả phí (5–15 USD/GB cho residential proxy) hoặc scraping API (49–200+ USD/tháng tùy volume).

n8n web scraping so với Thunderbit thì khác nhau thế nào?

n8n tốt hơn cho tự động hóa nhiều bước, nơi scraping chỉ là một phần của workflow lớn hơn (ví dụ: scrape → enrich → filter → đẩy vào CRM → cảnh báo trên Slack). Thunderbit tốt hơn cho trích xuất dữ liệu nhanh, không cần code, với AI tự nhận diện field, phân trang tự động và gần như không cần bảo trì khi site thay đổi. Nhiều đội dùng cả hai cùng lúc — Thunderbit cho extraction, n8n cho orchestration.

Tôi có thể scrape các site yêu cầu đăng nhập bằng n8n không?

Có, nhưng bạn phải cấu hình cookie hoặc session token trong HTTP Request node, và việc duy trì có thể khá rắc rối. Chế độ Browser Scraping của Thunderbit sẽ tự động kế thừa phiên Chrome đã đăng nhập của bạn — nếu bạn đang đăng nhập, Thunderbit có thể scrape những gì bạn nhìn thấy.

Tôi nên làm gì khi scraper n8n đột nhiên ngừng trả dữ liệu?

Trước hết, kiểm tra tab n8n Executions để xem có lỗi không. Nguyên nhân phổ biến nhất là site đổi layout làm hỏng CSS selector — workflow vẫn "thành công" nhưng trường dữ liệu trống. Hãy kiểm tra selector bằng công cụ Inspect của Chrome, cập nhật chúng trong workflow (hoặc trong sheet selector bên ngoài), rồi test lại. Nếu bạn đang gặp chặn anti-bot, hãy làm theo sơ đồ xử lý trong hướng dẫn này. Để ổn định lâu dài, hãy cân nhắc scraper dùng AI như Thunderbit, công cụ tự thích ứng với thay đổi layout.

Tìm hiểu thêm

Mục lục

Thử Thunderbit

Trích xuất lead và dữ liệu khác chỉ trong 2 cú nhấp. Powered by AI.

Nhận Thunderbit Miễn phí
Trích xuất dữ liệu bằng AI
Dễ dàng chuyển dữ liệu sang Google Sheets, Airtable hoặc Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week