Сайт блокирует Python Crawler.В поисках идеи, чтобы избежать - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу сканировать данные с объектных сайтов из https://www.fewo -direkt.de (в США https://www.homeaway.com/), например: https://www.fewo -direkt.de / ferienwohnung-ferienhaus / p8735326 Но если сканер попытается запустить страницу, я получу только страницу с кодом ниже. Я думаю, что несколько блоков блокирует сканер, но я не знаю, как и где существует возможный способ избежатьУ кого-нибудь есть идеи?

Python, запросы, BeautifulSoup - с другими сайтами все работает нормально.

<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%" marginheight="0px" marginwidth="0px" src="/_Incapsula_Resource?CWUDNSAI=20&amp;xinfo=5-259174360-0%200NNN%20RT%281546012021046%20144%29%20q%280%20-1%20-1%20-1%29%20r%280%20-1%29%20B15%283%2c901868%2c0%29%20U5&amp;incident_id=877000750783982903-1038286134589588661&amp;edet=15&amp;cinfo=03000000" width="100%">Request unsuccessful. Incapsula incident ID: 877000750783982903-1038286134589588661</iframe></body>
</html>

1 Ответ

0 голосов
/ 28 декабря 2018

Существует большое количество методов, которые веб-сайты могут использовать для обнаружения ботов.Мы можем сгруппировать их в следующем списке:

  1. Проверка заголовков. Это самая распространенная проверка базового уровня, которая проверяет Заголовки HTTP-запроса для существования, отсутствия, значений по умолчанию, фальшивых или поврежденных значений.

    Например, по умолчанию User-Agent в запросах Python начинается с python-requests/, что может быть легко проверено на бэкенде, и в результате ваш клиент будет помечен какбот и получить ответ «ошибка».

    Решение: Попробуйте прослушать тот же запрос из браузера (вы можете использовать Fiddler ) и клонировать заголовки из браузера.В запросах Python это может быть сделано с помощью следующего кода:

    headers = {
        "User-Agent": "Some User-Agent"
    }
    response = requests.get(url, headers=headers)
    
  2. Cookies проверка. Да, Cookie также HTTP-заголовок, но метод проверки отличается от предыдущего.Идея этого метода заключается в проверке заголовка Cookie и проверке каждого файла cookie.

    Решение:

    1) Перехватывать все запросы, выполненные браузером;

    2) Проверьте запрос, который вы пытаетесь повторить, и посмотрите заголовок Cookie;

    3) Поиск значений каждого файла cookie в предыдущих запросах;

    4) Повторите каждый запрос, которыйустановить cookie (-ы) перед основным запросом для сбора всех необходимых файлов cookie.

    В запросах Python вам не нужно очищать вручную, просто используйте session:

    http_session = requests.Session() 
    http_session.get(url_to_get_cookie)  # cookies will be stored inside "http_session" object
    response = http_session.get(final_url)
    
  3. Проверка IP-адреса или поставщика. Веб-сайт может проверить IP-адрес и поставщика, которые не указаны в базах спама.Это возможно, если вы используете публичные прокси / VPN.

    Решение: Попробуйте использовать другие прокси или сменить VPN.

Конечно,это упрощенное руководство, которое не включает информацию о генерации JavaScript заголовков / токенов, «контрольных» запросов, WebSocket и т. д. Но, на мой взгляд, оно может быть полезным в качестве руководства начального уровня, которое может указать кому-то, где искать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...