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.SeleniumRequestao invés deRequestdo 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-seleniumnormalmente, 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_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
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/'
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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.