Scrapy Proxy Middleware: Hướng Dẫn Cấu Hình và Luân Chuyển Proxy
TL;DR
Middleware tích hợp sẵn của Scrapy HttpProxyMiddleware đọc Request.meta["proxy"] hoặc biến môi trường proxy chuẩn; một middleware tùy chỉnh chỉ cần thiết cho chính sách lựa chọn hoặc telemetry.
Đặt URL proxy trên yêu cầu trước khi middleware tích hợp sẵn xử lý. Một meta["proxy"] cho mỗi yêu cầu ghi đè các proxy môi trường và bỏ qua no_proxy.
Chỉ xoay vòng giữa các tuyến proxy đã cấu hình và được ủy quyền, và giữ một tuyến ổn định cho các chuỗi yêu cầu trạng thái.
RetryMiddleware của Scrapy xử lý các lỗi tạm thời riêng biệt với lựa chọn proxy. Không thử lại các lỗi xác thực 407 một cách mù quáng.
Nstdata cung cấp Host, Port, Username, Password và các tham số phiên đã được tạo cho proxy; Scrapy không tạo ra các giá trị đó.
Bạn cần gì trước khi thiết lập Middleware Proxy Scrapy?
Bạn cần một dự án Scrapy, một mục tiêu được cho phép, và một URL proxy hoạt động từ nhà cung cấp của bạn. Đối với Nstdata, tạo một Kênh, bật Tạo Proxy, chọn sản phẩm và tham số định tuyến, và sao chép URL đã tạo từ Chi tiết Kênh. Giữ URL trong một kho bí mật. Hướng dẫn Proxy Nstdata liệt kê Host cổng, ID Kênh, mật khẩu, quốc gia, thời gian phiên và ID phiên. Không thay thế một cổng được đoán hoặc mã cứng mật khẩu Kênh thực trong settings.py.
Cài đặt Scrapy trong một môi trường ảo với python -m pip install scrapy, sau đó tạo một dự án với scrapy startproject proxy_demo. Đặt các ví dụ dưới đây vào các tệp cài đặt và nhện hiện có của dự án. Những đoạn mã này dựa vào tài liệu nhưng không phải là một kết nối Nstdata trực tiếp: không có thông tin đăng nhập Kênh nào có sẵn trong bài viết này.
Trải nghiệm Nstproxy Proxy - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Scrapy chọn proxy cho một yêu cầu như thế nào?
Scrapy chọn một proxy thông qua khóa meta proxy của yêu cầu hoặc qua các biến môi trường proxy được xử lý bởi HttpProxyMiddleware tích hợp. Tài liệu tài liệu middleware tải xuống Scrapy cho biết rằng giá trị trên mỗi yêu cầu có quyền ưu tiên hơn http_proxy và https_proxy, và nó cũng bỏ qua no_proxy. Quyền ưu tiên đó có thể gây ngạc nhiên cho các đội ngũ mà thời gian chạy có một proxy doanh nghiệp được cấu hình.
Một URL proxy thường bắt đầu bằng http:// ngay cả đối với một điểm đến HTTPS. Chế độ xác định kết nối proxy, không phải mục tiêu. Không phải tất cả các bộ xử lý tải xuống tích hợp sẵn của Scrapy đều hỗ trợ SOCKS; tài liệu hiện tại gọi tên HttpxDownloadHandler là hỗ trợ SOCKS và lưu ý một giới hạn cho H2DownloadHandler. Sử dụng sự kết hợp giao thức và bộ xử lý được hỗ trợ bởi triển khai của bạn.
Phương pháp 1: Bạn đặt một proxy trên một yêu cầu như thế nào?
Đặt một proxy trong nhện khi công việc có một lộ trình cố định và không có logic lựa chọn.
Bước 1: Tải URL từ thời gian chạy
Tiêm PROXY_URL thông qua một trình quản lý bí mật. Nó nên chứa giao thức đã tạo, Host, Port, Username và Password. Không in nó ra.
Bước 2: Gắn nó vào yêu cầu
import os
import scrapy
classIpCheckSpider(scrapy.Spider): name ="ip_check"defstart_requests(self):yield scrapy.Request("https://api.ipapi.is/", meta={"proxy": os.environ["PROXY_URL"]}, callback=self.parse, dont_filter=True,)defparse(self, response): self.logger.info("status=%s url=%s", response.status, response.url)yield{"status": response.status,"body_sample": response.text[:200]}
Tài liệu của Nstdata sử dụng điểm truy cập kiểm tra IP để kiểm tra lối ra. Mẫu nội dung có thể tiết lộ vị trí, vì vậy hãy xử lý nó như dữ liệu chẩn đoán và xóa nó khỏi nhật ký sản xuất nếu không cần thiết.
Bước 3: Xác minh lộ trình
Chạy scrapy crawl ip_check -O ip-check.json trong môi trường được ủy quyền của bạn. Kiểm tra IP và khu vực lối ra quan sát. Xác nhận rằng yêu cầu đã sử dụng Kênh mong muốn mà không tiết lộ thông tin đăng nhập.
Phương pháp 2: Bạn cấu hình một proxy toàn dự án như thế nào?
Proxy môi trường toàn dự án hoạt động khi mỗi yêu cầu nên sử dụng cùng một lộ trình và không có ngoại lệ cho mỗi yêu cầu.
Bước 1: Cung cấp biến môi trường
Đặt https_proxy và, nếu cần, http_proxy thành URL proxy đã tạo thông qua việc tiêm bí mật của công việc. Tránh một tệp .env đã được cam kết có chứa thông tin đăng nhập.
Bước 2: Để middleware tích hợp sẵn được kích hoạt
Scrapy kích hoạt HttpProxyMiddleware theo mặc định dưới cài đặt chuẩn của nó. Đừng thay thế DOWNLOADER_MIDDLEWARES_BASE; các mục tùy chỉnh thuộc về DOWNLOADER_MIDDLEWARES. Tài liệu chính thức về middleware mô tả mô hình kích hoạt và thứ tự.
Bước 3: Kiểm tra cho các ghi đè theo yêu cầu
Một yêu cầu nhện với meta["proxy"] ghi đè lộ trình môi trường. Ghi lại chính sách nào đang hoạt động trong cấu hình công việc của bạn. Nếu một công việc trộn lẫn các yêu cầu proxy và yêu cầu trực tiếp, việc cấu hình rõ ràng theo yêu cầu sẽ dễ dàng hơn để kiểm tra.
Phương pháp 3: Bạn xoay vòng các proxy trong Middleware tùy chỉnh như thế nào?
Một middleware tải xuống tùy chỉnh có thể chọn từ danh sách giới hạn các URL proxy đã được tạo và phê duyệt. Nó không nên tạo ra tên người dùng của nhà cung cấp hoặc tạo ra các phiên không giới hạn.
Bước 1: Lưu trữ các tuyến đã được phê duyệt dưới dạng bí mật
Chèn một mảng JSON vào PROXY_URLS_JSON. Mỗi phần tử nên là một URL hoàn chỉnh được tạo ra cho một tuyến được phép. Trong môi trường sản xuất, nên ưa chuộng một kho bí mật hơn là một bản sao môi trường bình thường.
Bước 2: Thêm một middleware lựa chọn
import itertools
import json
import os
classProxySelectionMiddleware:def__init__(self): routes = json.loads(os.environ["PROXY_URLS_JSON"])ifnot routes:raise ValueError("PROXY_URLS_JSON must contain a route") self.routes = itertools.cycle(routes)defprocess_request(self, request, spider):if request.meta.get("keep_proxy"):returnNone request.meta["proxy"]=next(self.routes)returnNone
Cấu hình nó trước middleware proxy tích hợp sẵn của Scrapy:
Middleware chọn một tuyến, trong khi bộ xử lý tích hợp của Scrapy thực hiện kết nối proxy. Đoạn mã này chỉ mang tính minh họa và cần một dự án thực tế, các tuyến và mục tiêu được ủy quyền để thực thi.
Bước 3: Bảo tồn các phiên trạng thái và kiểm tra các lần thử lại
Đối với một chuỗi yêu cầu mà phải giữ lại cùng một lối thoát, hãy truyền meta={"proxy": existing_url, "keep_proxy": True} cho các yêu cầu tiếp theo. Xác nhận chính sách phiên dính của nhà cung cấp một cách tách biệt. Tài liệu RetryMiddleware của Scrapy liệt kê các mã phản hồi tạm thời và một ngân sách thử lại mặc định hữu hạn; một lần thử lại có thể quay lại middleware lựa chọn của bạn. Quyết định xem một lần thử lại có nên giữ lại hay thay đổi tuyến, sau đó kiểm tra hành vi đó với một cấu hình điều khiển. Không bao giờ sử dụng quay vòng để phớt lờ chính sách truy cập của một mục tiêu.
Tại Sao Một Proxy Scrapy Thất Bại Hoặc Quay Vòng Không Mong Đợi?
Một proxy Scrapy có thể thất bại do thông tin xác thực cổng không chính xác, độ ưu tiên của middleware, các giao thức không được hỗ trợ, hoặc phản hồi từ mục tiêu. Một proxy 407 chỉ ra vấn đề xác thực hoặc trạng thái Kênh. Một lỗi kết nối gợi ý về Máy chủ, Cổng, tường lửa ra vào, hoặc sự không tương thích của giao thức. Một mục tiêu 403 hoặc 429 yêu cầu xem xét chính sách nguồn và tỷ lệ. Một 200 với một trang thách thức là một sự thất bại về nội dung, không phải là một sự trích xuất thành công. Hướng dẫn khắc phục sự cố Nstdata đề cập đến 407 và khả năng kết nối.
Nếu quay vòng xuất hiện không mong đợi, hãy ghi lại một ID tuyến đã được chỉnh sửa và ID phiên cho mỗi yêu cầu. Kiểm tra xem process_request có chạy lại khi thử lại không, có phải yêu cầu tiếp theo đã mất keep_proxy, và thời gian dính của nhà cung cấp đã hết hạn chưa. Thống kê của Scrapy nên phân biệt giữa các yêu cầu đã thử, các lỗi proxy, các lỗi mục tiêu và các mục được chấp nhận. Lưu trữ các mục đã chấp nhận với URL nguồn và thời gian lấy để một thay đổi IP không che giấu việc thu thập trùng lặp.
Bạn Nên Sử Dụng Cài Đặt Nào?
Sử dụng meta["proxy"] theo từng yêu cầu cho định tuyến rõ ràng, các biến môi trường cho một công việc đồng nhất, và một middleware tùy chỉnh khi bạn cần một chính sách lựa chọn đã được thử nghiệm. Bắt đầu với một yêu cầu kiểm tra IP, sau đó là một nhện được ủy quyền nhỏ. Giữ việc thử lại và xác thực nội dung tách biệt khỏi gán tuyến.
Nstdata Proxy cung cấp lối đi mạng; Nstdata Proxy Manager có thể tập trung các nhóm và chẩn đoán cho nhiều công việc. Nếu bạn cần phát hiện trang web và chuyển đổi trang được quản lý thay vì một pipeline Scrapy tự quản lý, Nstdata Crawl là một API Cào Web riêng cho dữ liệu sẵn sàng cho LLM.
Q: Tôi có cần một middleware tùy chỉnh cho một proxy không?
Không. Đặt Request.meta["proxy"] hoặc một biến môi trường proxy tiêu chuẩn; middleware tích hợp sẵn của Scrapy xử lý tuyến đường.
Q: Có phải meta["proxy"] ghi đè các proxy môi trường không?
Có. Scrapy ghi nhận rằng proxy theo từng yêu cầu có độ ưu tiên cao hơn và bỏ qua no_proxy.
Q: Tôi có nên thử lại HTTP 407 không?
Không. Xem mã 407 như một lỗi xác thực hoặc cấu hình kênh cho đến khi nguyên nhân được sửa chữa.
Q: Mọi trình xử lý tải xuống của Scrapy có hỗ trợ SOCKS5 không?
Không. Kiểm tra tài liệu của trình xử lý hiện tại; sự hỗ trợ của middleware proxy tích hợp phụ thuộc vào trình xử lý tải xuống.
Q: Mã có thể chạy mà không cần thông tin xác thực Nstdata không?
Cú pháp Scrapy có thể được xem xét cục bộ, nhưng một bài kiểm tra đường dẫn Nstdata trực tiếp yêu cầu một Kênh và thông tin xác thực proxy được tạo ra.
So sánh xác thực người dùng qua proxy bằng tên đăng nhập-mật khẩu và danh sách trắng IP, thiết lập từng phương pháp, chẩn đoán lỗi 407, và chọn quy trình làm việc Nstdata an toàn.
Kai Watanabe
Nov. 5th 2026
Hơn 110 triệu IP thực với tỷ lệ truy cập thành công 99,9%
Phản hồi trung bình ~0,5 giây cho tác vụ có độ đồng thời cao
Chỉ từ $0.1/GB
Truy cập ngay các nhóm proxy dân cư, trung tâm dữ liệu, IPv6 và ISP cao cấp.