2012-01-07 34 views

Trả lời

48

Có một setting cho rằng:

DOWNLOAD_DELAY

Mặc định: 0

Lượng thời gian (trong giây) mà downloader nên chờ đợi trước khi tải trang liên tiếp so với cùng trang mạng. Điều này có thể được sử dụng để tăng tốc độ thu thập dữ liệu để tránh đánh máy chủ quá khó.

DOWNLOAD_DELAY = 0.25 # 250 ms of delay 

Đọc tài liệu: https://doc.scrapy.org/en/latest/index.html

+0

Cảm ơn. Nó hoạt động :) –

+4

Nếu bạn đặt 'DOWNLOAD_DELAY = 1', tôi không nghĩ bạn có thể nhận được 60 trang trong một phút. Nó cũng bị hạn chế bởi tốc độ tải xuống và tất cả các loại chi phí. Tôi sẽ nói rằng nó chỉ cung cấp cho bạn một giới hạn trên cạo để bạn không nhấn các trang web mục tiêu quá nhiều. –

7
class S(Spider): 
    rate = 1 

    def __init__(self): 
     self.download_delay = 1/float(self.rate) 

tỷ lệ đặt ra một số tiền tối đa của các trang có thể được tải về trong một giây.

+0

Bạn có thể thêm mô tả hoặc giải thích về điều này không. Vì nó đứng tôi phải bỏ phiếu câu trả lời này để xóa. – Numeron

3

chậm trễ Chúng ta có thể thiết lập trong 2 nói: -

Chúng tôi có thể xác định sự chậm trễ khi chạy bánh xích. Ví dụ: crawl mẫu scrapy --set DOWNLOAD_DELAY = 3 (có nghĩa là 3 giây chậm trễ giữa hai yêu cầu)

Hoặc nếu không chúng ta có thể xác định Globaly trong settings.py DOWNLOAD_DELAY = 3

bởi scrapy mặc định mất 0,25 giây chậm trễ giữa 2 yêu cầu.

4

nếu bạn muốn trì hoãn tải xuống chính xác một giây, hãy đặt DOWNLOAD_DELAY=1 là cách thực hiện.

Nhưng cũng có một tính năng tự động đặt độ trễ tải xuống được gọi là AutoThrottle. Nó tự động đặt độ trễ dựa trên tải của cả máy chủ Scrapy và trang web bạn đang thu thập thông tin. Điều này làm việc tốt hơn là thiết lập một sự chậm trễ tùy ý.

đọc thêm về vấn đề này trên http://doc.scrapy.org/en/1.0/topics/autothrottle.html#autothrottle-extension
Tôi đã trườn hơn 100 tên miền và không bị chặn với AutoThrottle bật

2

Bên cạnh DOWNLOAD_DELAY, bạn cũng có thể sử dụng tính năng AUTOTHROTTLE của scrapy, https://doc.scrapy.org/en/latest/topics/autothrottle.html

Nó thay đổi số tiền trễ giữa các yêu cầu tùy thuộc vào tập tin cài đặt. Nếu bạn đặt 1 cho cả thời gian bắt đầu và độ trễ tối đa, nó sẽ chờ 1 giây trong mỗi yêu cầu.

Mục đích ban đầu là thay đổi thời gian trễ để phát hiện bot của bạn sẽ khó hơn.

Bạn chỉ cần đặt nó trong settings.py như sau:

AUTOTHROTTLE_ENABLED = True 
AUTOTHROTTLE_START_DELAY = 1 
AUTOTHROTTLE_MAX_DELAY = 3 
Các vấn đề liên quan