Skip to main content

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

Metadata

Release files for antiblock-scrapy-selenium 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for antiblock-scrapy-selenium 0.0.1
File Size Uploaded Provenance Actions
antiblock-scrapy-selenium-0.0.1.tar.gz 6.2 kB Without provenance Details for antiblock-scrapy-selenium-0.0.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for antiblock-scrapy-selenium 0.0.1
File Interpreter ABI Platform Actions
antiblock_scrapy_selenium-0.0.1-py3-none-any.whl Python 3 none any Details for antiblock_scrapy_selenium-0.0.1-py3-none-any.whl

Total release size: 13.9 kB

Release files / antiblock-scrapy-selenium-0.0.1.tar.gz

Download URL antiblock-scrapy-selenium-0.0.1.tar.gz
Size 6.2 kB
Tags Source
SHA-256 checksum
How to use checksums
21ac0c8720482c3514bc5b93626545b23d3dd982521a7316d1345aa06747ace1
BLAKE2b-256 checksum
How to use checksums
2c40ed4db3063b9709dd15d57f95da8210eb180da8142d17b80bff9571b839d5
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / antiblock_scrapy_selenium-0.0.1-py3-none-any.whl

Download URL antiblock_scrapy_selenium-0.0.1-py3-none-any.whl
Size 7.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8be2f89aa4e000ae748aae10421c4f53550b89eeaa23fd1371480337a8ce2ee0
BLAKE2b-256 checksum
How to use checksums
b0b63ee3a28761712a1ba9a8d9a09a5e6c81da726a9e4a801da28fe8b116b663
Upload date
Uploaded using Trusted Publishing?
What is 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

Security for antiblock-scrapy-selenium 0.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page