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 deRequest
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
- Exemplo com um Spider:
- 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 comoFalse
) ou aleatório, escolhido entre0.5 * SELENIUM_DRIVER_TIME_BETWEEN_CALLS
e1.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 emSELENIUM_DRIVER_COOKIE_DOMAIN
- Se
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
- Se a lista não vazia for passada, é necessário especificar o domínio dos cookies em
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for antiblock-scrapy-selenium-0.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21ac0c8720482c3514bc5b93626545b23d3dd982521a7316d1345aa06747ace1 |
|
MD5 | c077bf2b2e64328580e27cb3a4cbcce2 |
|
BLAKE2b-256 | 2c40ed4db3063b9709dd15d57f95da8210eb180da8142d17b80bff9571b839d5 |
Hashes for antiblock_scrapy_selenium-0.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8be2f89aa4e000ae748aae10421c4f53550b89eeaa23fd1371480337a8ce2ee0 |
|
MD5 | f9e70407d76a1719ac43aaaf77383fe8 |
|
BLAKE2b-256 | b0b63ee3a28761712a1ba9a8d9a09a5e6c81da726a9e4a801da28fe8b116b663 |