التكامل · متوسط

مُتدَرَّر و مُتَصَدِّق في "سكرابي" مع حمّل من وسط واري

وتدعم شركة Scrapy ' s HtpProxyMiddleware شركة HTTP الموثوقة من خلال الطلب.meta[ 'proxy].

2 دقيقة قراءة 4 أقسام تمت المراجعة فريق التحرير Proxy Cyber

أبسط نسخة#

(ب) أن يبيّن الرد قبل إعادة التجريب قاعدة الدخول التي لن يُحلّها أحد شركاء التنفيذ، وأن يحترم، بالنسبة إلى 429، معدل الإعادة إلى العمل ويقلل من معدل الطلب؛ ويستخدم التخلف المقيد عن الاتصال المؤقت أو إخفاقات الخواديم؛ ولا يُعاد تشغيل عمليات تغيير الدولة إلا إذا أمكنك منع تكرار الإجراءات.

spider.py
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()}

برنامج متوسط للدورات اللزجة لكل بند#

middlewares.py
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}"
settings.py
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`] في العنكبوت وقراءته في وسط الوراء لبناء البارامترات؛ ويستخدم المثال إطاراً واحداً للإرضاء.

حسابك

إدارة البروكسيات الخاصين بك في حساب واحد

مقارنة الشبكات، وتلقي الأوامر، وتتبع طلباتكم المتعلقة بالتوازن والدعم من لوحة واحدة، ويستعرض فريقنا المدفوعات ويقدم تفاصيل عن الاتصالات بعد التسليم.

إنشاء حساب