Skip to main content

Mecanismos antibloqueios para Scrapy-Selenium

项目描述

antiblock_scrapy_selenium

Este módulo é uma extensão para o projeto de scrapy-selenium

O principal uso do scrapy-selenium é para o caso de sites que precisam processar javascript para renderizar seu conteúdo。Por outro lado, mecanismos antibloqueios básicos de coletas não se encontram no projeto original。

Scrapy-selenium foi extendido usando como base antiblock -selenium,que permite rotacionar IPs via Tor,definir delays entre requisições (aleatório ou fixo),rotacionar user-agents,além de persistir/carregar cookies。

观察:Não há compatibilidade com selenium remoto neste projeto。

功能类

Junção de scrapy-selenium com antiblock- selenium , ou seja:

  • Permitir carregar sites que necessitam javascript ao Scrapy, entre outras funcionalidades do scrapy-selenium
  • Evitar bloqueios em coletas, por meio de:
    • 通过 Tor 的 IP 轮播
    • 用户代理旋转
    • 延迟 aleatórios ou fixos entre requisições
    • 坚持/卡莱格饼干

安装

Maneira 主要功能:

pip install antiblock-scrapy-selenium

配置

Siga os passos de configuração do Tor em antiblock -selenium

Os navegadores suportados são:

  • 铬合金
  • 火狐

乌索

巴西科

  • Ativação 做中间件:
    DOWNLOADER_MIDDLEWARES = {
        'antiblock_scrapy_selenium.SeleniumMiddleware': 800
    }
    
  • Adicione o navegador a ser usado, o local da executável do driver e os argumentos a serem passados:
    #settings.py
    from shutil import which
    
    SELENIUM_DRIVER_NAME = 'firefox' #ou chrome
    SELENIUM_DRIVER_EXECUTABLE_PATH = which('geckodriver')
    SELENIUM_DRIVER_ARGUMENTS=['-headless']  # '--headless' se estiver usando chrome
    
  • Opcionalmente, defina o local da executável do navegador:
    SELENIUM_BROWSER_EXECUTABLE_PATH = which('firefox')
    
  • 使用antiblock_scrapy_selenium.SeleniumRequestao invés de Requestdo Scrapy, como abaixo:
    from antiblock_scrapy_selenium import SeleniumRequest
    
    yield SeleniumRequest(url=url, callback=self.parse_result)
    
    • 示例通讯蜘蛛:
      import scrapy
      
      from antiblock_scrapy_selenium import SeleniumRequest
      
      class FooSpider(scrapy.Spider):
          name = 'foo'
      
          def start_requests(self):
              url = 'https://alguma-url'
      
              yield SeleniumRequest(url=url, callback=self.parse)
      
          def parse(self, response):
              pass
      
  • 利用 demais funcionalidades do scrapy-seleniumnormalmente, disponíveis aqui

O parametro SELENIUM_COMMAND_EXECUTOR do scrapy-selenium não é suportada。

我们反对机械主义

Após seguir os passos de uso básico, configure de acordo com os mecanismos de camuflagem abaixo。

通过 Tor 的 IP 轮播

参数:

  • SELENIUM_DRIVER_CHANGE_IP_AFTER: 定义 com quantas requisições o IP será alterado(Default 42)
  • SELENIUM_DRIVER_ALLOW_REUSE_IP_AFTER: define quando um IP poderá ser reusado(Default 10)

示例:

SELENIUM_DRIVER_CHANGE_IP_AFTER = 42
SELENIUM_DRIVER_ALLOW_REUSE_IP_AFTER = 5

用户代理旋转

支持一个 rotação de user-agent apenas para Firefox。

参数:

  • SELENIUM_DRIVER_USER_AGENTS: Lista de user-agents a ser rotacionada。
  • SELENIUM_DRIVER_CHANGE_USER_AGENT_AFTER: Quando o user-agent deverá se alterado(Default 0 - user-agent não muda)

示例:

# settings.py

SELENIUM_DRIVER_USER_AGENTS = ['user-agent-1', 'user-agent-2', ... , 'user-agent-n']
SELENIUM_DRIVER_CHANGE_USER_AGENT_AFTER = 721 #Requisições com mesmo user-agent Ex.: 10, 20, 30... 

Atrasos entre requisições

Permite atrasos aleatórios ou fixos entre requisições。

参数:

  • SELENIUM_DRIVER_TIME_BETWEEN_CALLS: Tempo em segundos entre requisições。Aceita números com até 2 duas casas decimais(Default 0.25)
  • SELENIUM_DRIVER_RANDOM_DELAY: Se o atraso entre requisições será fixo (definindo esse parâmetro como False) ou aleatório, escolhido entre 0.5 * SELENIUM_DRIVER_TIME_BETWEEN_CALLSe1.5 * SELENIUM_DRIVER_TIME_BETWEEN_CALLS (Default True)
# settings.py

SELENIUM_DRIVER_TIME_BETWEEN_CALLS = 2.5
SELENIUM_DRIVER_RANDOM_DELAY = False # Tempo mínimo fixo entre requisições

Gerência de Cookies

参数:

  • SELENIUM_DRIVER_PERSIST_COOKIES_WHEN_CLOSE: Se quando o driver é fechado os cookies deles serão salvos(Default False)
  • SELENIUM_DRIVER_RELOAD_COOKIES_WHEN_START: Se ao iniciar, cookies salvos na última sessão serão recarregados(Default False)
    • Se True, é necessário especificar o domínio dos cookies emSELENIUM_DRIVER_COOKIE_DOMAIN
  • SELENIUM_DRIVER_LOCATION_OF_COOKIES:当地的onde os cookies serão salvos。(Default 'cookies.pkl')
  • SELENIUM_DRIVER_LOAD_COOKIES: Lista de cookies a serem carregados (默认 [] - Lista vazia)
    • Se a lista não vazia for passada, é necessário especificar o domínio dos cookies emSELENIUM_DRIVER_COOKIE_DOMAIN
  • SELENIUM_DRIVER_COOKIE_DOMAIN: Domínio onde os cookies 圣瓦利多斯。

示例 - Persistindo cookie:

# settings.py

SELENIUM_DRIVER_PERSIST_COOKIES_WHEN_CLOSE = True
SELENIUM_DRIVER_RELOAD_COOKIES_WHEN_START = True
SELENIUM_DRIVER_COOKIE_DOMAIN = 'https://www.site-sendo-coletado.com/'

SELENIUM_DRIVER_LOCATION_OF_COOKIES = 'cookies-1.pkl'

示例 - Carregando cookie:

cookie1 = {'country': 'BR', 'currency': 'dolar'}
cookie2 = {'lang': 'pt-br'}

SELENIUM_DRIVER_LOAD_COOKIES = [cookie1, cookie2]
SELENIUM_DRIVER_COOKIE_DOMAIN = 'https://www.site-sendo-coletado.com/' 

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

antiblock-scrapy-selenium-0.0.1.tar.gz (6.2 kB 查看哈希)

已上传 source

内置分布

antiblock_scrapy_selenium-0.0.1-py3-none-any.whl (7.7 kB 查看哈希

已上传 py3