أبسط نسخة#
(ب) أن يبيّن الرد قبل إعادة التجريب قاعدة الدخول التي لن يُحلّها أحد شركاء التنفيذ، وأن يحترم، بالنسبة إلى 429، معدل الإعادة إلى العمل ويقلل من معدل الطلب؛ ويستخدم التخلف المقيد عن الاتصال المؤقت أو إخفاقات الخواديم؛ ولا يُعاد تشغيل عمليات تغيير الدولة إلا إذا أمكنك منع تكرار الإجراءات.
import scrapy
PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
class PricesSpider(scrapy.Spider):
name = "prices"
start_urls = ["https://example.com/catalog"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, meta={"proxy": PROXY})
def parse(self, response):
for href in response.css("a.product::attr(href)").getall():
yield response.follow(href, callback=self.parse_product, meta={"proxy": PROXY})
def parse_product(self, response):
yield {"url": response.url, "price": response.css(".price::text").get()}برنامج متوسط للدورات اللزجة لكل بند#
import hashlib
class Proxy CyberMiddleware:
GATEWAY = "res.proxy-cyber.com:9000"
def __init__(self, user, password, country):
self.user, self.password, self.country = user, password, country
@classmethod
def from_crawler(cls, crawler):
s = crawler.settings
return cls(s.get("KEY_PROXY_USER"), s.get("KEY_PROXY_PASS"), s.get("KEY_PROXY_COUNTRY", "us"))
def process_request(self, request, spider):
# Sticky when the request carries a session key (e.g. one per product flow), rotating otherwise
key = request.meta.get("session_key")
user = f"{self.user}-cc-{self.country}"
if key:
sid = hashlib.sha1(key.encode()).hexdigest()[:12]
user += f"-sid-{sid}-ttl-10m"
request.meta["proxy"] = f"http://{user}:{self.password}@{self.GATEWAY}"DOWNLOADER_MIDDLEWARES = {
"myproject.middlewares.Proxy CyberMiddleware": 350, # before HttpProxyMiddleware (750)
}
KEY_PROXY_USER = "USER"
KEY_PROXY_PASS = "PASS"
KEY_PROXY_COUNTRY = "de"
CONCURRENT_REQUESTS = 32
CONCURRENT_REQUESTS_PER_DOMAIN = 8
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_TARGET_CONCURRENCY = 4.0
DOWNLOAD_TIMEOUT = 45
RETRY_ENABLED = True
RETRY_TIMES = 2
RETRY_HTTP_CODES = [408, 429, 500, 502, 503, 504, 522, 524]
COMPRESSION_ENABLED = Trueإن إعادة استخدام الوصلات والتكليف بالخدمة الدولية هما أمران مختلفان، حيث تقوم جلسة العملاء بإعادة استخدام الجوارب، ولا تحدد البوابة إلا التناوب وسلوك الحيازة، ولا تستخدم معايير الدورة التي توفرها خدمتكم، وتتحقق من الخروج من عدة طلبات، ولا يضمن إغلاق جورب أو إرساله أي اتصال آخر.
إبقاء الفاتورة منخفضة#
- ولا يُحمّل البرمجيات الصور أو النصوص؛ ولا يُحمّل نظام HTML والشبكة المشتركة بين الوكالات إلاّ إذا رتبت صفحة على ذلك تكاليف حجمها.
- الإجهاد (العجز) والتفادي
Splashأو صانعة الجعة ما لم تكن البيانات بحاجة إليها - ذاكرة التخزين المؤقت مع
HTTPCACHE_ENABLED = Trueأثناء التنمية، لا تدفعون لإعادة تسجيل نفس الصفحات بينما تُفسدون المختارين
المداراة لكل مجال#
المسبح هو طريقة لتكون العديد من الزوار المهذبين، وليس واحد غير مكتمل. CONCURRENT_REQUESTS_PER_DOMAIN (أ) أن يحافظ على كل هدف بمعدل قابل للاحتجاز البشري لكل مخرج؛ سياسة الاستخدام المقبول يحرم أي شيء يبدو وكأنه هجوم.
أسئلة يطرحها الناس#
هل أحتاج إلى وكلاء متناوبين؟
ليس مع بوابة: التناوب يحدث على الجانب الرئيسي من مكتب التحقيقات لكل اتصال جديد، وهذه المجموعة تدير قوائم بالبروزات الثابتة؛ وهناك بركاز واحد للتكفير.
كيف أستخدم بلد مختلف لكل طلب؟
وضع الطلب.meta[ ' country`] في العنكبوت وقراءته في وسط الوراء لبناء البارامترات؛ ويستخدم المثال إطاراً واحداً للإرضاء.