Skip to main content

Mecanismos antibloqueios para Scrapy-Selenium

Project description

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.

Obs.: Não há compatibilidade com selenium remoto neste projeto.

Funcionalidades

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:
    • Rotação de IPs via Tor
    • Rotação de user-agents
    • Delays aleatórios ou fixos entre requisições
    • Persistir/carregar cookies

Instalação

Maneira mais fácil:

pip install antiblock-scrapy-selenium

Configuração

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

Os navegadores suportados são:

  • Chrome
  • Firefox

Uso

Básico

  • Ativação do Middleware:
    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')
    
  • Use antiblock_scrapy_selenium.SeleniumRequest ao invés de Request do Scrapy, como abaixo:
    from antiblock_scrapy_selenium import SeleniumRequest
    
    yield SeleniumRequest(url=url, callback=self.parse_result)
    
    • Exemplo com um Spider:
      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
      
  • Utilize as demais funcionalidades do scrapy-selenium normalmente, disponíveis aqui.

O parâmetro SELENIUM_COMMAND_EXECUTOR do scrapy-selenium não é suportada.

Uso de mecanismos antibloqueios

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

Rotação de IPs via Tor

Parâmetros:

  • SELENIUM_DRIVER_CHANGE_IP_AFTER: Define 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)

Exemplo:

SELENIUM_DRIVER_CHANGE_IP_AFTER = 42
SELENIUM_DRIVER_ALLOW_REUSE_IP_AFTER = 5

Rotação de user-agents

Suporte a rotação de user-agent apenas para Firefox.

Parâmetros:

  • 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)

Exemplo:

# 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.

Parâmetros:

  • 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_CALLS e 1.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

Parâmetros:

  • 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 em SELENIUM_DRIVER_COOKIE_DOMAIN
  • SELENIUM_DRIVER_LOCATION_OF_COOKIES: Local onde os cookies serão salvos. (Default 'cookies.pkl')
  • SELENIUM_DRIVER_LOAD_COOKIES: Lista de cookies a serem carregados (Default [] - Lista vazia)
    • Se a lista não vazia for passada, é necessário especificar o domínio dos cookies em SELENIUM_DRIVER_COOKIE_DOMAIN
  • SELENIUM_DRIVER_COOKIE_DOMAIN: Domínio onde os cookies são válidos.

Exemplo - Persistindo cookies:

# 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'

Exemplo - Carregando cookies:

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/' 

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

antiblock-scrapy-selenium-0.0.1.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

File details

Details for the file antiblock-scrapy-selenium-0.0.1.tar.gz.

File metadata

  • Download URL: antiblock-scrapy-selenium-0.0.1.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.3.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.9

File hashes

Hashes for antiblock-scrapy-selenium-0.0.1.tar.gz
Algorithm Hash digest
SHA256 21ac0c8720482c3514bc5b93626545b23d3dd982521a7316d1345aa06747ace1
MD5 c077bf2b2e64328580e27cb3a4cbcce2
BLAKE2b-256 2c40ed4db3063b9709dd15d57f95da8210eb180da8142d17b80bff9571b839d5

See more details on using hashes here.

File details

Details for the file antiblock_scrapy_selenium-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: antiblock_scrapy_selenium-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.3.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.6.9

File hashes

Hashes for antiblock_scrapy_selenium-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8be2f89aa4e000ae748aae10421c4f53550b89eeaa23fd1371480337a8ce2ee0
MD5 f9e70407d76a1719ac43aaaf77383fe8
BLAKE2b-256 b0b63ee3a28761712a1ba9a8d9a09a5e6c81da726a9e4a801da28fe8b116b663

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page