Mecanismos antibloqueios para Scrapy-Selenium
项目描述
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。
观察:Não há compatibilidade com selenium remoto neste projeto。
功能类
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:
- 通过 Tor 的 IP 轮播
- 用户代理旋转
- 延迟 aleatórios ou fixos entre requisições
- 坚持/卡莱格饼干
安装
Maneira 主要功能:
pip install antiblock-scrapy-selenium
配置
Siga os passos de configuração do Tor em antiblock -selenium。
Os navegadores suportados são:
- 铬合金
- 火狐
乌索
巴西科
- Ativação 做中间件:
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')
- 使用
antiblock_scrapy_selenium.SeleniumRequestao invés deRequestdo Scrapy, como abaixo:from antiblock_scrapy_selenium import SeleniumRequest yield SeleniumRequest(url=url, callback=self.parse_result)
- 示例通讯蜘蛛:
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
- 示例通讯蜘蛛:
- 利用 demais funcionalidades do
scrapy-seleniumnormalmente, disponíveis aqui。
O parametro SELENIUM_COMMAND_EXECUTOR do scrapy-selenium não é suportada。
我们反对机械主义
Após seguir os passos de uso básico, configure de acordo com os mecanismos de camuflagem abaixo。
通过 Tor 的 IP 轮播
参数:
SELENIUM_DRIVER_CHANGE_IP_AFTER: 定义 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)
示例:
SELENIUM_DRIVER_CHANGE_IP_AFTER = 42
SELENIUM_DRIVER_ALLOW_REUSE_IP_AFTER = 5
用户代理旋转
支持一个 rotação de user-agent apenas para Firefox。
参数:
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)
示例:
# 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。
参数:
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
参数:
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:当地的onde os cookies serão salvos。(Default 'cookies.pkl')SELENIUM_DRIVER_LOAD_COOKIES: Lista de cookies a serem carregados (默认 [] - 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 圣瓦利多斯。
示例 - Persistindo cookie:
# 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'
示例 - Carregando cookie:
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/'
项目详情
antiblock_scrapy_selenium -0.0.1-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 8be2f89aa4e000ae748aae10421c4f53550b89eeaa23fd1371480337a8ce2ee0 |
|
| MD5 | f9e70407d76a1719ac43aaaf77383fe8 |
|
| 布莱克2-256 | b0b63ee3a28761712a1ba9a8d9a09a5e6c81da726a9e4a801da28fe8b116b663 |