Package: antiblock-scrapy-selenium
antiblock_scrapy_seleniumEste módulo é uma extensão para o projeto descrapy-selenium.O principal uso doscrapy-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 baseantiblock-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.FuncionalidadesJunção descrapy-seleniumcomantiblock-selenium, ou seja:Permitir carregar sites que necessitam javascript ao Scrapy, entre outras funcionalidades doscrapy-seleniumEvitar bloqueios em coletas, por meio de:Rotação de IPs via TorRotação de user-agentsDelays aleatórios ou fixos entre requisiçõesPersistir/carregar cookiesInstalaçãoManeira mais fácil:pipinstallantiblock-scrapy-seleniumConfiguraçãoSiga os passos de configuração do Tor emantiblock-selenium.Os navegadores suportados são:ChromeFirefoxUsoBásicoAtivaçã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.pyfromshutilimportwhichSELENIUM_DRIVER_NAME='firefox'#ou chromeSELENIUM_DRIVER_EXECUTABLE_PATH=which('geckodriver')SELENIUM_DRIVER_ARGUMENTS=['-headless']# '--headless' se estiver usando chromeOpcionalmente, defina o local da executável do navegador:SELENIUM_BROWSER_EXECUTABLE_PATH=which('firefox')Useantiblock_scrapy_selenium.SeleniumRequestao invés deRequestdo Scrapy, como abaixo:fromantiblock_scrapy_seleniumimportSeleniumRequestyieldSeleniumRequest(url=url,callback=self.parse_result)Exemplo com um Spider:importscrapyfromantiblock_scrapy_seleniumimportSeleniumRequestclassFooSpider(scrapy.Spider):name='foo'defstart_requests(self):url='https://alguma-url'yieldSeleniumRequest(url=url,callback=self.parse)defparse(self,response):passUtilize as demais funcionalidades doscrapy-seleniumnormalmente, disponíveisaqui.O parâmetro SELENIUM_COMMAND_EXECUTOR do scrapy-selenium não é suportada.Uso de mecanismos antibloqueiosApós seguir os passos de uso básico, configure de acordo com os mecanismos de camuflagem abaixo.Rotação de IPs via TorParâ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=42SELENIUM_DRIVER_ALLOW_REUSE_IP_AFTER=5Rotação de user-agentsSuporte 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.pySELENIUM_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çõesPermite 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.pySELENIUM_DRIVER_TIME_BETWEEN_CALLS=2.5SELENIUM_DRIVER_RANDOM_DELAY=False# Tempo mínimo fixo entre requisiçõesGerência de CookiesParâ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)SeTrue, é necessário especificar o domínio dos cookies emSELENIUM_DRIVER_COOKIE_DOMAINSELENIUM_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 emSELENIUM_DRIVER_COOKIE_DOMAINSELENIUM_DRIVER_COOKIE_DOMAIN: Domínio onde os cookies são válidos.Exemplo - Persistindo cookies:# settings.pySELENIUM_DRIVER_PERSIST_COOKIES_WHEN_CLOSE=TrueSELENIUM_DRIVER_RELOAD_COOKIES_WHEN_START=TrueSELENIUM_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/'