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
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 21ac0c8720482c3514bc5b93626545b23d3dd982521a7316d1345aa06747ace1 |
|
MD5 | c077bf2b2e64328580e27cb3a4cbcce2 |
|
BLAKE2b-256 | 2c40ed4db3063b9709dd15d57f95da8210eb180da8142d17b80bff9571b839d5 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8be2f89aa4e000ae748aae10421c4f53550b89eeaa23fd1371480337a8ce2ee0 |
|
MD5 | f9e70407d76a1719ac43aaaf77383fe8 |
|
BLAKE2b-256 | b0b63ee3a28761712a1ba9a8d9a09a5e6c81da726a9e4a801da28fe8b116b663 |