он продолжает перенаправлять меня на страницу с бот-капчей.
Потому что они знают, что вы бот.Вы можете сделать три вещи, чтобы предотвратить это:
- В settings.py настройте следующие переменные.С этим вы можете сделать ваши звонки более случайными.Это самый простой способ улучшить свой скребок.Тем не менее, я думаю, что недостаточно обойти безопасность каяка.
Пример кода:
DOWNLOAD_DELAY=0.75
RANDOMIZE_DOWNLOAD_DELAY=True
AUTOTHROTTLE_ENABLED=True
AUTOTHROTTLE_MAX_DELAY=4
AUTOTHROTTLE_START_DELAY=1.25
AUTOTHROTTLE_DEBUG=False
AUTOTHROTTLE_TARGET_CONCURRENCY=1.5
# The download delay setting will honor only one of:
CONCURRENT_REQUESTS_PER_DOMAIN=1
CONCURRENT_REQUESTS_PER_IP=1 #Default 4
User-Agent, вы уже упоминали об этом.В settings.py вы можете установить
DOWNLOADER_MIDDLEWARES
.
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': None,
'scraper1.middlewares.randomproxy.RandomProxyMiddleware': 100,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scraper1.middlewares.randomuseragent.RandomUserAgentMiddleware': 400,
}
Здесь вы можете добавить некоторые промежуточные программы для ваших целей.Попробуйте получить простой список 100/200 пользовательских агентов: https://developers.whatismybrowser.com/useragents/explore/
То же самое относится к прокси.Вам понадобятся разные прокси, чтобы сделать ваши запросы как можно более случайными.
Примерно так в промежуточном ПО:
class RandomProxyMiddleware(object):
def __init__(self, settings):
super(RandomProxyMiddleware, self).__init__()
# Get proxies from DB
try:
proxy_list = ProxyService.get_proxies()
except:
logging.critical('Failed to get proxies')
self.proxies = []
for proxy in proxy_list:
self.proxies.append('http://' + str(proxy[0]) + ':' + str(proxy[1]))
Отредактированный пример прокси промежуточного ПО.
class RandomProxyMiddleware(object):
def __init__(self, settings):
super(RandomProxyMiddleware, self).__init__()
self.proxies = [
'proxy1.com:8000',
'proxy2.com:8031'
]
Выможно также взглянуть на эту библиотеку: https://pypi.org/project/scrapy-rotating-proxies/
Что на самом деле будет делать то же самое с некоторыми дополнительными вещами, такими как проверка, действительны ли прокси.