A small extension to Scrapy that provides a WaitRequest for delayed/polling requests.
Project description
scrapy-waitrequests
Hey! This is a library for common problems we encounter when dealing with situations that vanilla Scrapy does not fully cover, so here you can find a lot of useful tools.
Index
- Wait Request
Wait Request
Wait Request is a method to keep polling for a task's completion—such as a CAPTCHA or batch job—without blocking other requests. You can prepare the initial request along with a function to evaluate whether you have received the desired response. Here is an example:
from scrapy import Spider
from scrapy_algova.wait_request import WaitRequest
class MySpider(Spider):
name = "my_spider"
def start_requests(self):
yield WaitRequest(
url="https://some.api/endpoint",
method="POST",
formdata={"foo": "bar", "captcha_id": "12345"},
callback=self.parse_result,
errback=self.handle_error,
check_condition=self.is_captcha_ready,
wait_time=3.0, # Interval (in seconds) before making the next request
max_tries=5, # You don't want to check forever, so set a max number of tries
meta={"info": "extra data"},
dont_filter=True
)
def is_captcha_ready(self, response):
"""
Check if the response matches what you expect (e.g., a JSON with "status": "OK").
Otherwise, return False so WaitRequest will retry.
"""
data = response.json()
return data.get("status") == "OK"
def parse_result(self, response):
"""
Called when 'is_captcha_ready' returns True
or when 'max_tries' is reached.
"""
data = response.json()
self.logger.info("Task completed! Response data: %s", data)
# Continue your logic here...
def handle_error(self, failure):
"""
Called when there's a network error, a 500 HTTP response, etc.
"""
self.logger.error("Request failed: %s", failure.value)
This approach is far better than using a busy wait with time.sleep(), an infinite while True, or immediately sending repeated requests without any interval. It keeps the reactor free so that other Scrapy requests can run concurrently.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file scrapy_algova-0.1.3.tar.gz.
File metadata
- Download URL: scrapy_algova-0.1.3.tar.gz
- Upload date:
- Size: 4.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.0.1 CPython/3.9.21 Darwin/24.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
957d2e02e27401f900a49b4efe9182499bac04f6aba316766721529016b64f67
|
|
| MD5 |
c9ca6a9f55a1d3fbb137a901fd01e8f6
|
|
| BLAKE2b-256 |
7573c5e962f0e430b5004bf467f5cc5cc07a6cd8b7445ea9a2377c09d78aab33
|
File details
Details for the file scrapy_algova-0.1.3-py3-none-any.whl.
File metadata
- Download URL: scrapy_algova-0.1.3-py3-none-any.whl
- Upload date:
- Size: 4.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.0.1 CPython/3.9.21 Darwin/24.2.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2877d321b8ba42c2aeb39b9f099f8940d7092c1187e33df5ed96c2a768ffef1b
|
|
| MD5 |
87402006b44b009cfc3e827201faaa36
|
|
| BLAKE2b-256 |
05ad23a30bffa1b73aebd20b19b350600faa9168ca87ff5475fb712aa6dcc156
|