Интеграциялар· Аралық

Жүктегіштің бағдарламалық құралымен Scrapy-де айналмалы және жабысқақ проксилер

Ccrapy's HTTP-дің HTTP-прокси-микробтарын request.meta["procy] арқылы қолдайды. Нақты жеткізілген шлюзді конфигурациялаңыз, кейінгі сұрауларға параметрлерді көбейтіңіз және валютаны көбейтпес бұрын тағайындалған сеанс режимін тексеріңіз.

2 мин оқыңыз 4 бөлім Қайта қаралған Редакциялық топ Proxy Cyber

Ең қарапайым нұсқа#

Қайталамас бұрын жауапты жіктеңіз. 403 басқа IP шешілмейтін кіру ережесін көрсетуі мүмкін. 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()}

Бір элементке жабысқақ сеанстарға арналған орташа бағдарлама#

midwares.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}"
Параметрлер.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

Қосылуды қайта пайдалану және IP тағайындау әртүрлі басқару элементтері болып табылады.Клиент сеансы розеткаларды қайта пайдаланады; тек тағайындалған шлюз айналуды және жабысқақ сеанс әрекетін анықтайды.Сіздің қызметіңізбен жеткізілетін сеанс параметрлерін пайдаланыңыз және бірнеше сұраулардың шығуын тексеріңіз. Розетканы немесе жөнелтуді жабу: басқа IP-ге кепілдік бермейді.

Заң жобасын төмен ұстау#

  • Scrapy суреттерді немесе сценарийлерді жүктемейді; HTML және JSON ғана, сондықтан бет оның HTML өлшемін құны.
  • Қысуды қосу (әдепкі) және болдырмау Splash немесе егер деректер қажет болмаса, шолғышты көрсету.
  • Кэш бар HTTPCACHE_ENABLED = True әзірлеу кезінде, сондықтан сіз қайта қарау үшін сол беттерді төлеуге емес,, ал селекторларды алып тастау.

Домендік сыпайылық#

Бассейн - бұл көптеген сыпайы келушілер болу тәсілі, оны ешкім білдірмейді. CONCURRENT_REQUESTS_PER_DOMAIN және AutoTrottle әрбір мақсатты бір шығу адам-болжамды жылдамдықпен ұстап; Қолайлы пайдалану саясаты шабуылға ұқсайтын нәрсеге тыйым салады.

Адамдар қоятын сұрақтар#

Маған қырғышты айналдыратын проксилер керек пе?

Шлюзмен емес: айналдыру әрбір жаңа қосылым үшін негізгі прокси жағында болады.Бұл пакет статикалық проксилердің тізімдерін басқарады; res.proxy-cyber.com көмегімен конфигурацияланатын бір прокси бар.

Сұрау бойынша басқа елді қалай пайдалануға болады?

-cc-параметрін құрастыру үшін, өрмекшіде request.meta["ел"] параметрін орнатыңыз және оны ортаңғы бағдарламада оқыңыз; мысал қысқалық үшін бірыңғай параметрді пайдаланады.

Сіздің шотыңыз

Барлық проксилерді бір аккаунттан басқарыңыз

Желілерді салыстырыңыз, тапсырыстарды орналастырыңыз және бір бақылау тақтасынан теңгерім мен қолдау сұрауларын орындаңыз.Біздің команда төлемдерді қарайды және жеткізілімнен кейін байланыс мәліметтерін ұсынады.

Аккаунт ашу