Scrapy and Incapsula - PullRequest
       45

Scrapy and Incapsula

3 голосов
/ 30 октября 2019

Я пытаюсь использовать Scrapy with Splash для получения данных с сайта whoscored.com. Вот мои настройки:

BOT_NAME = 'scrapy_matchs'

# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'scrapy_matchs (+http://www.yourdomain.com)'

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 1

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
DOWNLOAD_DELAY = 20
# The download delay setting will honor only one of:
# CONCURRENT_REQUESTS_PER_DOMAIN = 1
CONCURRENT_REQUESTS_PER_IP = 1

# Disable cookies (enabled by default)
COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
    'Accept-Encoding': 'none',
    'Accept-Language': 'en-US,en;q=0.8',
    'Connection': 'keep-alive'
}

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy_useragents.downloadermiddlewares.useragents.UserAgentsMiddleware': 500,
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
    'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

USER_AGENTS = [
    ('Mozilla/5.0 (X11; Linux x86_64) '
     'AppleWebKit/537.36 (KHTML, like Gecko) '
     'Chrome/57.0.2987.110 '
     'Safari/537.36'),  # chrome
    ('Mozilla/5.0 (X11; Linux x86_64) '
     'AppleWebKit/537.36 (KHTML, like Gecko) '
     'Chrome/61.0.3163.79 '
     'Safari/537.36'),  # chrome
    ('Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) '
     'Gecko/20100101 '
     'Firefox/55.0'),  # firefox
    ('Mozilla/5.0 (X11; Linux x86_64) '
     'AppleWebKit/537.36 (KHTML, like Gecko) '
     'Chrome/61.0.3163.91 '
     'Safari/537.36'),  # chrome
    ('Mozilla/5.0 (X11; Linux x86_64) '
     'AppleWebKit/537.36 (KHTML, like Gecko) '
     'Chrome/62.0.3202.89 '
     'Safari/537.36'),  # chrome
    ('Mozilla/5.0 (X11; Linux x86_64) '
     'AppleWebKit/537.36 (KHTML, like Gecko) '
     'Chrome/63.0.3239.108 '
     'Safari/537.36'),  # chrome
]

# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
#    'scrapy_matchs.pipelines.ScrapyMatchsPipeline': 300,
#}

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
AUTOTHROTTLE_ENABLED = True
# The initial download delay
AUTOTHROTTLE_START_DELAY = 30
# The maximum download delay to be set in case of high latencies
AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
# AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

SPLASH_URL = 'http://localhost:8050/'
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'

До этого я использовал только Splash, и я мог по крайней мере запросить 2 или 3 страницы, прежде чем меня заблокировали Incapsula. Но с помощью Scrapy я был заблокирован сразу после первого запроса.

<html style="height:100%">
 <head>
  <meta content="NOINDEX, NOFOLLOW" name="ROBOTS"/>
  <meta content="telephone=no" name="format-detection"/>
  <meta content="initial-scale=1.0" name="viewport"/>
  <meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
  <script src="/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3" type="text/javascript">
  </script>
 </head>
 <body style="margin:0px;height:100%">
  <iframe frameborder="0" height="100%" id="main-iframe" marginheight="0px" marginwidth="0px" src="/_Incapsula_Resource?CWUDNSAI=22&amp;xinfo=14-58014137-0%200NNN%20RT%281572446923864%2084%29%20q%280%20-1%20-1%202%29%20r%280%20-1%29%20B17%284%2c200%2c0%29%20U18&amp;incident_id=727001300034907080-167681622137047086&amp;edet=17&amp;cinfo=04000000&amp;rpinfo=0" width="100%">
   Request unsuccessful. Incapsula incident ID: 727001300034907080-167681622137047086
  </iframe>
 </body>
</html>

Почему меня так легко блокируют? Стоит ли менять настройки?

Заранее спасибо.

1 Ответ

1 голос
/ 10 ноября 2019

Возможно ли, что они записали ваши предыдущие операции очистки? Что Scrapy не несет ответственности? Вообще?

USER_AGENT = 'scrapy_matchs (+http://www.yourdomain.com)'

Эта часть также заставила меня задуматься о файлах журналов моих собственных веб-серверов, в которых есть такие URL-адреса, как github.com/masscan. Если бы домен был связан с очисткой или содержал фразу scrapy, я бы не расстроился из-за их запрета. Обязательно следуйте правилам robots.txt, бот не проверяйте, это сделает вас плохо выглядящим;) и я бы не использовал так много пользовательских агентов. Мне также нравится идея получить заголовки по умолчанию для сайта и разместить их вместо ваших собственных. Если бы у меня был сайт с большим количеством сканируемого контента, я мог бы представить себе фильтрацию пользователей, основываясь на том, были ли у них заголовки запросов, которые выглядели странными / отключенными.

Я предлагаю вам ...

  1. nmap сканировать сайт, чтобы выяснить, какой веб-сервер они используют.
  2. установить и настроить его на локальном компьютере с помощьюбольшинство основных настроек. (Включите все параметры регистрации, некоторые серверы отключены)
  3. проверьте файлы журнала для этого сервера и выясните, как выглядит ваш очищающий трафик по сравнению с вашим браузером, подключенным к сайту.
  4. Тогда подумайте, как сделать так, чтобы первое выглядело точно так же, как второе.
  5. Если ни одна из этих работ по устранению проблемы не использует scrapy, просто используйте селен, когда реальный пользовательский агент автоматически проходит по сайту с вашим кодом сканирования, работающим на страницах, полученных автоматизацией пользователя.
  6. Я бы также предложил вам использовать другой ip-прокси или другими способами, потому что кажется, что ваш ip-адрес может быть где-то в списке банов
  7. Бесплатная версия AWS будет простым способом проверки безопасности сайтов, если они позволят вам подключиться к сайту через прокси-порт ssh, который вы установили на своем компьютере, подключенном к серверу AWS, тогда это означает, что у них нетзапретил использование сервера AWS, который вы используете, что, как я полагаю, означает, что им не хватает безопасности, потому что, по сути, когда-либо на сервере AWS на Земле, он, похоже, ежедневно сканирует мой Pi.
  8. Эта работа выполняется в библиотеке рядом со Starbucks рядом с ... с бесплатным wifi и разными ip адресами было бы хорошо.
...