Cách Thiết Lập Proxy trong Splash vào Năm 2026 - Hướng Dẫn Từng Bước
Tóm tắt
Các tuyến đường Splash thông qua một tham số HTTP duy nhất, proxy, mà chấp nhận một URL proxy hoặc một hồ sơ đã đặt tên. Định dạng URL là [protocol://][user:password@]host[:port], với http hoặc socks5 là giao thức và cổng 1080 là mặc định khi không được chỉ định.
Các hồ sơ proxy được đặt tên yêu cầu khởi động Splash với --proxy-profiles-path và chỉ vào một thư mục chứa các tệp .ini; một hồ sơ default.ini sẽ tự động áp dụng cho mọi yêu cầu trừ khi yêu cầu đó rõ ràng truyền proxy=none.
Mỗi phần [proxy] của hồ sơ chứa host, port, tùy chọn username/password, và type (HTTP hoặc SOCKS5), trong khi phần [rules] của nó hạn chế proxy cho các URL phù hợp thông qua các mẫu regex allowlist/denylist.
, chạy trước khi yêu cầu được gửi và có thể gán một proxy khác cho các loại tài nguyên khác nhau trên cùng một trang.
Trải nghiem Nstproxy - Bat dau dung thu mien phi ngay
Đối với logic proxy theo yêu cầu hoặc theo loại tài nguyên, API Lua của Splash mở rộng request:set_proxy{host, port, username, password, type} bên trong một callback splash:on_request
scrapy-splash chuyển tiếp các tham số HTTP của Splash không thay đổi, do đó từ điển args của một SplashRequest có thể mang proxy theo cách mà một cuộc gọi render.html thô làm.
Một nhà cung cấp proxy chuyển động như Nstproxy có thể kết nối vào bất kỳ phương pháp nào ở trên — URL trực tiếp, hồ sơ .ini, hoặc Lua set_proxy — vì Splash coi proxy như một host:port thông thường cộng với thông tin xác thực tùy chọn, bất kể ai phát hành chúng.
Giới thiệu: định tuyến lưu lượng truy cập qua Splash mà không làm mất đi câu chuyện
Splash là dịch vụ trình duyệt không giao diện, có thể lập trình của Scrapinghub/Zyte, thường được truy cập thông qua API HTTP hoặc thông qua scrapy-splash tích hợp Scrapy. Nó trình diễn các trang nặng JavaScript và trả về HTML, PNG, JSON, hoặc HAR, nhưng mặc định mỗi yêu cầu dành riêng cho việc trình diễn đều rời khỏi máy chủ Splash từ địa chỉ IP xuất phát của Splash. Các trang web xác định dấu vân tay qua IP, chặn theo ASN, hoặc giới hạn tần suất theo địa chỉ nguồn sẽ đối xử với mọi yêu cầu giống nhau, bất kể có bao nhiêu trang mục tiêu khác nhau mà một trình quét truy cập — cho đến khi một proxy nằm giữa Splash và trang web mục tiêu.
Splash cung cấp ba cách riêng biệt để chèn proxy: một tham số yêu cầu proxy duy nhất cho các proxy tạm thời hoặc tự xoay, một thư mục --proxy-profiles-path chứa các tệp .ini cho các hồ sơ đã đặt tên dùng lại, và một cuộc gọi Lua request:set_proxy cho điều khiển theo yêu cầu hoặc theo loại tài nguyên. Hướng dẫn này sẽ đi qua cả ba cách, cộng với các kết nối scrapy-splash cần thiết để truyền giá trị proxy từ một nhện Scrapy, và kết thúc với cách kết nối một bể proxy dân cư luân chuyển vào bất kỳ phương pháp nào ở trên.
Điều kiện tiên quyết
Một phiên bản Splash đang chạy — các ví dụ dưới đây sử dụng hình ảnh Docker chính thức scrapinghub/splash, vì tài liệu cài đặt của Splash khuyên dùng Docker hơn là cài đặt Python cục bộ cho hầu hết các cấu hình. Mã nguồn và trình theo dõi sự cố của Splash sống trong kho lưu trữ scrapinghub/splash trên GitHub.
Docker được cài đặt cục bộ (hoặc một máy chủ từ xa mà bạn có thể truy cập trên cổng 8050).
Thông tin xác thực proxy từ nhà cung cấp — host, port, và (nếu cần thiết) username/password. Thông tin xác thực thực sự không bao giờ được in trong bài viết này; mỗi ví dụ sử dụng các giá trị đại diện như YOUR_PROXY_HOST và YOUR_PROXY_PASSWORD.
scrapy và scrapy-splash đã được cài đặt (pip install scrapy scrapy-splash) chỉ cho các phần sử dụng Scrapy.
Không có lệnh nào dưới đây được thực hiện trong một container Splash hoạt động trong môi trường đã sản xuất bài viết này — không có runtime Docker nào có sẵn. Mọi lệnh và tên tham số đều được kiểm tra dựa trên tài liệu và mã nguồn của Splash (splash.readthedocs.io, github.com/scrapinghub/splash) thay vì được phát minh, và mỗi khối mã đều được gán nhãn là minh họa hoặc chỉ cấu hình dưới đây.
Cài đặt và khởi động Splash
Khởi động Splash theo cách mà tài liệu của nó khuyên dùng, ánh xạ cổng API đến máy chủ. Lệnh này khớp với cú pháp đã được ghi chép; nó không được thực thi trực tiếp trong môi trường này (không có runtime Docker có sẵn), vì vậy hãy coi nó là minh họa:
docker run -it-p8050:8050 --rm scrapinghub/splash
API sẽ có thể truy cập tại http://localhost:8050. Xác nhận rằng nó phản hồi trước khi kết nối proxy:
Một khi Splash có thể tiếp cận một trang mục tiêu trực tiếp, chế độ lỗi tiếp theo thường là trang mục tiêu chặn địa chỉ IP của Splash — một bể IP cư trú quay vòng như Nstproxy's Residential Lite proxies cung cấp cho Splash một địa chỉ IP xuất phát mới cho mỗi phiên thay vì một địa chỉ tĩnh mà mọi trang có thể đánh dấu.
Cấu hình một proxy với tham số yêu cầu proxy
Cách nhanh nhất để chuyển một cuộc gọi render đơn lẻ qua một proxy là tham số yêu cầu proxy của Splash, có sẵn trên render.html, render.png, render.json, execute, và các điểm cuối render khác. Nó chấp nhận một URL proxy theo dạng [protocol://][user:password@]proxyhost[:port], trong đó giao thức là http hoặc socks5 và cổng mặc định là 1080 nếu không được chỉ định:
Đây là công cụ phù hợp khi một kịch bản xây dựng URL proxy vào thời điểm yêu cầu — ví dụ, lấy một điểm cuối phiên xoay mới từ nhà cung cấp trước mỗi cuộc gọi Splash. Đây không phải là công cụ phù hợp khi cùng một proxy cần được áp dụng tự động cho mọi yêu cầu mà không cần nhắc lại URL mỗi lần; đó là điều mà các hồ sơ proxy xử lý.
Cấu hình các hồ sơ proxy có thể tái sử dụng với các file .ini
Một hồ sơ proxy là một file .ini được đặt tên mà Splash đọc một lần tại thời điểm khởi động và sau đó sử dụng lại theo tên thay vì một URL đầy đủ. Kích hoạt các hồ sơ bằng cách khởi động Splash với --proxy-profiles-path trỏ tới một thư mục:
host và port là bắt buộc; username, password, và type là tùy chọn (type mặc định là HTTP, và Splash cũng chấp nhận SOCKS5). Phần [rules] của allowlist và denylist là các biểu thức chính quy được phân tách bằng dòng: một yêu cầu chỉ được chuyển tiếp khi URL của nó khớp với allowlist và không khớp với denylist, vì vậy ví dụ trên chuyển tiếp mọi thứ ngoại trừ các phần mở rộng tài sản tĩnh thông thường.
Lưu file dưới dạng default.ini trong thư mục hồ sơ để nó tự động áp dụng cho mọi yêu cầu mà không cần đặt tên, hoặc lưu nó dưới một tên khác và tham chiếu đến nó một cách rõ ràng:
Gửi proxy=none trên bất kỳ yêu cầu đơn lẻ nào để bỏ qua hồ sơ default.ini khi một hồ sơ đã được cấu hình. Sự phân biệt này — một default.ini đang hoạt động âm thầm so với một hồ sơ bạn phải đặt tên — là nguyên nhân phổ biến nhất cho các báo cáo "proxy của tôi không được sử dụng" đối với Splash: yêu cầu có thể đã khớp với một quy tắc trong denylist, hoặc một default.ini đang ghi đè một giả định rằng không có proxy nào được thiết lập.
Kiểm soát proxy theo yêu cầu với API scripting Lua
Điểm cuối scripting Lua của Splash (execute) có thể kiểm tra và chỉnh sửa một yêu cầu trước khi nó được gửi, sử dụng callback splash:on_request và phương thức set_proxy của đối tượng yêu cầu:
Kịch bản Lua này là minh họa — so khớp với API đối tượng yêu cầu đã được tài liệu hóa, không thực hiện trên một phiên bản Splash đang hoạt động:
functionmain(splash, args) splash:on_request(function(request)if request.url:find("%.png$")or request.url:find("%.jpg$")then request.abort()returnend request:set_proxy{ host ="YOUR_PROXY_HOST", port =tonumber("YOUR_PROXY_PORT"), username ="YOUR_PROXY_USER", password ="YOUR_PROXY_PASSWORD", type ="HTTP",}end)assert(splash:go(args.url))assert(splash:wait(0.5))return splash:html()end
set_proxy chỉ hoạt động bên trong splash:on_request, và chỉ trước khi yêu cầu thực sự được gửi đi — gọi nó sau trong callback sẽ không có tác dụng. Bỏ qua username và password cho một proxy không yêu cầu xác thực. Thiết lập type = "HTTP" vẫn có thể định tuyến đúng các mục tiêu HTTPS, vì Splash thực hiện trường hợp đó với phương thức CONNECT tiêu chuẩn thay vì yêu cầu một loại proxy HTTPS riêng biệt.
Callback này sẽ được gọi một lần cho mỗi tài nguyên, không phải một lần cho mỗi trang, vì vậy một script có thể định tuyến tài liệu chính qua một proxy và bỏ qua proxy (hoặc sử dụng một proxy khác) cho hình ảnh, phông chữ hoặc tín hiệu phân tích trên cùng một trang — điều mà cả tham số proxy lẫn một hồ sơ tĩnh đều không thể làm được một mình, vì cả hai đều áp dụng ở cấp độ của một cuộc gọi render duy nhất.
Gửi script đến điểm cuối execute với mã nguồn Lua là tham số lua_source:
scrapy-splash gửi các yêu cầu Scrapy đến một instance Splash và chuyển tiếp từ điển args trực tiếp như các tham số yêu cầu của Splash, vì vậy một khóa proxy bên trong args hoạt động chính xác giống như tham số chuỗi truy vấn proxy đã được sử dụng trước đó. README của gói tài liệu các tên middleware và cài đặt chính xác bên dưới.
Cài đặt và cấu hình các middleware cần thiết để Scrapy định tuyến yêu cầu qua Splash:
pip install scrapy scrapy-splash
Đoạn mã settings.py này là config-only, phù hợp với các giá trị đã được tài liệu hóa trong README của scrapy-splash:
Sau đó, truyền proxy bên trong args của một SplashRequest:
Ví dụ về spider này là một prerequisite-gap — nó chưa được thực thi chống lại một ngăn xếp Splash+Scrapy trực tiếp trong môi trường này, vì không có Docker/mạng runtime nào khả dụng:
from scrapy import Spider
from scrapy_splash import SplashRequest
classProxyExampleSpider(Spider): name ="proxy_example"defstart_requests(self):yield SplashRequest( url="https://example.com/", callback=self.parse, args={"proxy":"http://YOUR_PROXY_USER:YOUR_PROXY_PASSWORD@YOUR_PROXY_HOST:YOUR_PROXY_PORT","wait":0.5,}, endpoint="render.html",)defparse(self, response):yield{"title": response.css("title::text").get()}
Các giá trị trong args ánh xạ một-một lên các tham số API HTTP của Splash, vì vậy một hồ sơ proxy có tên hoạt động theo cách giống như: args={"proxy": "myprovider"}. Vì SplashDeduplicateArgsMiddleware nhận dạng các yêu cầu bằng các tham số Splash của chúng, việc xoay giá trị proxy trên mỗi yêu cầu (thay vì tái sử dụng một giá trị tĩnh) cũng ngăn cản lớp loại bỏ trùng lặp của Scrapy đối xử các yêu cầu proxy xoay như nhau là trùng lặp.
Định tuyến một nhà cung cấp proxy xoay vòng qua Splash
Cả ba cơ chế Splash ở trên đều mong đợi cùng ba hoặc bốn yếu tố về một proxy: một máy chủ, một cổng, và — đối với các nhóm được xác thực — một tên người dùng và mật khẩu. Một nhà cung cấp proxy dân cư hoặc trung tâm dữ liệu xoay vòng cung cấp chính xác những thông tin đó, thường thông qua một máy chủ cổng chung duy nhất và cổng, xoay IP thoát theo phiên hoặc theo yêu cầu trong nền, vì vậy không có một xử lý proxy nào của Splash phải thay đổi để sử dụng điều đó.
Nstproxy cung cấp các cổng proxy tương thích HTTP(S) và SOCKS5 qua nhiều dòng sản phẩm, bao gồm Residential Lite Proxies, bao phủ hơn 50 triệu IP dân cư trên hơn 200 quốc gia và vùng lãnh thổ theo mô hình tính phí gói trả trước. Chi tiết về máy chủ cổng, cổng, và thông tin xác thực cho một kế hoạch đang hoạt động có sẵn từ tài liệu Nstproxy sau khi đăng ký. Vì Splash chỉ cần host:port tiêu chuẩn cộng với thông tin xác thực user:pass tùy chọn, một điểm cuối gateway Residential Lite có thể áp dụng vào bất kỳ mẫu nào ở trên — tham số URL proxy= cho các cuộc gọi một lần, phần [proxy] của một hồ sơ .ini cho một giá trị mặc định cố định, hoặc request:set_proxy trong Lua cho định tuyến theo tài nguyên:
Kiểm soát phiên — Cổng Nstproxy thường cung cấp các chế độ phiên cố định và xoay vòng thông qua chính chuỗi tên người dùng, điều này quan trọng cho Splash vì một hồ sơ .ini hoặc một cuộc gọi Lua set_proxy là cố định trong suốt cuộc đời của tập tin hoặc script; việc xoay vòng sẽ xảy ra ở phía nhà cung cấp cho mỗi phiên mới thay vì bằng việc chỉnh sửa cấu hình của Splash.
Khớp giao thức — Trường type của Splash chỉ nhận diện HTTP và SOCKS5; xác nhận giao thức mà một dòng sản phẩm gateway của Nstproxy mong đợi trước khi viết một hồ sơ, vì việc không khớp giá trị type với giao thức gateway thực tế sẽ gây ra lỗi kết nối trông giống như lỗi proxy.
Mở rộng mà không cần chạm vào cấu hình Splash — vì thông tin đăng nhập nằm trong một host và cổng gateway thay vì một danh sách các địa chỉ IP proxy riêng lẻ, việc mở rộng từ một worker Splash sang nhiều worker không yêu cầu phân phối hoặc luân phiên một danh sách máy chủ proxy giữa các worker đó.
Nhìn Lướt Qua
Các điều khiển proxy dựa trên Lua và hồ sơ của Splash chỉ định tuyến lưu lượng — chúng không tự động luân phiên các địa chỉ IP, vì vậy việc kết hợp Splash với gateway dân cư của Nstproxy thực sự giúp phân tán các yêu cầu render qua các địa chỉ IP ra khỏi theo thời gian.
Một proxy được cấu hình sai trong Splash hiếm khi báo lỗi lớn — nó chỉ lặng lẽ quay về địa chỉ IP của Splash hoặc chặn một yêu cầu hợp lệ, đó là mẫu phàn nàn lặp lại ở phía sau một số vấn đề mở trong kho GitHub scrapinghub/splash. Thực hiện các kiểm tra này theo thứ tự:
Kiểm tra xem có default.ini ẩn không. Nếu một tệp default.ini tồn tại trong thư mục proxy-profiles, nó sẽ tự động áp dụng cho mọi yêu cầu; một yêu cầu được dự kiến vượt qua proxy cần một proxy=none rõ ràng.
Kiểm tra sự khớp của allowlist/denylist. Phần [rules] của hồ sơ chỉ proxy các URL khớp với allowlist và không khớp với denylist — một URL mục tiêu thất bại trong bất kỳ kiểm tra nào sẽ được lấy mà không qua proxy, mà không có lỗi nào được nâng lên.
Xác nhận rằng type khớp với giao thức thực tế của gateway. Yêu cầu một proxy HTTP đối với một gateway chỉ SOCKS5 (hoặc ngược lại) sẽ gây ra lỗi kết nối, không phải thông điệp "giao thức sai" rõ ràng.
Nhớ thời gian set_proxy. Nó chỉ có hiệu lực khi được gọi bên trong splash:on_request, trước khi yêu cầu được gửi; gọi nó ở bất kỳ đâu khác trong một script Lua sẽ không có hiệu ứng rõ ràng.
Kiểm tra rằng Splash thực sự đã được khởi động với --proxy-profiles-path. Nếu không có cờ đó, các hồ sơ có tên sẽ không được tải vào lúc nào, và tham số proxy=myprovider không có gì để giải quyết.
Giới hạn thực tế
Hỗ trợ proxy của Splash hoạt động hoàn toàn ở cấp độ kết nối: host, cổng, giao thức và xác thực tùy chọn. Nó không quản lý việc luân phiên proxy, kiểm tra tình trạng, hay tính bám dính phiên bản; những hành vi đó phải đến từ bất cứ thứ gì ngồi phía sau host:port mà một hồ sơ hoặc cuộc gọi set_proxy chỉ tới, liệu đó có phải là một script luân phiên các URL hay gateway của một nhà cung cấp luân phiên các phiên bên trong. Splash cũng áp dụng một proxy cho mỗi cuộc gọi render hoặc cho mỗi tài nguyên, không phải theo ngữ cảnh trình duyệt như cách mà một framework tự động hóa trình duyệt đầy đủ có thể kiểm soát một proxy cho một phiên bền vững qua nhiều lần tải trang. Khi một dự án scraping vượt quá một gateway tĩnh đơn lẻ và cần các quy tắc định tuyến qua nhiều nhóm, xem cách thu thập với Proxy Manager cho lớp tiếp theo đó.
Kết luận
Splash cung cấp cho một scraper ba công cụ để định tuyến lưu lượng proxy — một tham số URL proxy một lần, một hồ sơ .ini có thể tái sử dụng được tải thông qua --proxy-profiles-path, và một cuộc gọi Lua request:set_proxy cho kiểm soát theo tài nguyên bên trong splash:on_request — và cả ba đều chấp nhận cùng một hình dạng host/port/credential mà một nhà cung cấp proxy luân phiên phát hành. Việc khiến định tuyến proxy thực sự có hiệu lực chủ yếu là vấn đề tránh hai chế độ lỗi im lặng: một hồ sơ default.ini không được chú ý và một sự không khớp allowlist/denylist cho phép các yêu cầu qua mà không có proxy mà không nâng lỗi lên.
Câu hỏi thường gặp
Q: Các giao thức proxy nào mà Splash hỗ trợ?
Splash hỗ trợ http và socks5 trong tham số yêu cầu proxy và HTTP/SOCKS5 trong cả tệp proxy-profile .ini và trường type trong cuộc gọi Lua request:set_proxy; không có loại proxy HTTPS riêng biệt, vì proxy loại HTTP đã xử lý các mục tiêu HTTPS thông qua phương pháp CONNECT.
Q: Tôi có cần --proxy-profiles-path để sử dụng proxy không?
Không — --proxy-profiles-path chỉ cần thiết cho các hồ sơ proxy có tên, có thể tái sử dụng; một proxy một lần có thể được truyền trực tiếp dưới dạng URL trong tham số yêu cầu proxy mà không cần bất kỳ cờ khởi động đặc biệt nào.
Q: Tại sao proxy Splash của tôi dường như bị bỏ qua trong một số yêu cầu?
Các nguyên nhân phổ biến nhất là mẫu allowlist/denylist không khớp trong phần [rules] của hồ sơ proxy, một default.ini âm thầm ghi đè yêu cầu "không proxy" được giả định, hoặc một lời gọi request:set_proxy đặt ở nơi khác ngoài splash:on_request trước khi yêu cầu được gửi.
Q: Tôi có thể sử dụng một proxy khác nhau cho các tài nguyên khác nhau trên cùng một trang không?
Có — hàm callback Lua splash:on_request được gọi một lần cho mỗi tài nguyên (tài liệu, hình ảnh, script, v.v.), vì vậy việc gọi request:set_proxy với các giá trị khác nhau trong hàm callback đó sẽ định tuyến các loại tài nguyên khác nhau qua các proxy khác nhau trong một cuộc gọi render duy nhất.
Q: Scrapy-splash có cần cài đặt đặc biệt để truyền proxy không?
Không cần cài đặt bổ sung nào ngoài việc thiết lập middleware scrapy-splash tiêu chuẩn — một khóa proxy bên trong từ điển args của SplashRequest sẽ được chuyển tiếp đến Splash giống như tham số chuỗi truy vấn proxy trong một yêu cầu HTTP trực tiếp.
Q: Splash có tự động xoay vòng địa chỉ IP proxy không?
Không — Splash chỉ định tuyến một yêu cầu qua bất kỳ máy chủ, cổng và thông tin xác thực nào mà nó được cung cấp; việc xoay vòng địa chỉ IP ra ngoài theo thời gian phải đến từ cổng của nhà cung cấp proxy (ví dụ: chế độ phiên xoay vòng) hoặc từ một script thay đổi giá trị proxy giữa các yêu cầu.
Q: Quy trình làm việc này có giới hạn cho các mục tiêu scraping được ủy quyền không?
Có — mọi thứ trong bài viết này đều giả định quyền truy cập vào các trang công khai có sẵn theo các điều khoản của một trang; việc định tuyến lưu lượng qua một proxy không cho phép bỏ qua xác thực, tường phí, hoặc kiểm soát truy cập vào dữ liệu không công khai.
6 Máy chủ MCP tốt nhất cho Cursor trong năm 2026
So sánh tập trung vào quyết định giữa GitHub, Context7, Playwright, Firecrawl và một mẫu MCP hỗ trợ Crawl được kiểm soát cho Cursor.
Lena Zhou
Aug. 21st 2026
110M+ IP that voi ti le truy cap thanh cong 99.9%
Phan hoi trung binh ~0.5s cho tac vu dong thoi cao
Chi tu $0.1/GB
Truy cap ngay cac pool proxy residential, datacenter, IPv6 va ISP cao cap.