Практические навыки обходчика больших разговоров

Python рептилия
Практические навыки обходчика больших разговоров

爬虫与反爬虫间的对决

Рисунок 1 – Разборки между похотливыми рептилиями и антирептилиями

Важность данных

Сегодня эпоха больших данных. Данные движут развитием бизнеса и операционными средствами. С помощью данных пользователи могут быть профилированы и настроены. Данные могут указывать направление разработки программ и оптимизации принятия решений. Поэтому развитие Интернета продукты Все они неотделимы от сбора и анализа данных.Один из способов сбора данных — фиксировать взаимодействие пользователя с собственной платформой через API отчетов.Другой способ – разработать программы-краулер для обхода данных конкурирующих платформ. Позже, Я сосредоточусь на сценариях применения краулеров и проблемах, возникающих на практике, а также на некоторых подпрограммах и методах для анти-антикраулеров.


Сценарии применения

  • Интернет-платформа, ориентированная на сбытовые компании, сканирование информации о клиентах
    • Сканирование информации о клиентах может высвободить время торгового персонала для поиска ресурсов клиентов и повышения эффективности продаж для развития рынка.
    • Сканируйте информацию о клиентах на соответствующих платформах, сообщайте об этом в систему управления CRM и предоставляйте ее торговому персоналу для разработки.
  • Сканирование информации и приложение для бизнеса платформы
    • При частом просмотре информации вы обнаружите, что популярный информационный контент многих платформ очень похож. Платформы, которые уважают авторские права, укажут источник источника.
    • Сканирование информации и ее применение в информационном бизнесе может уменьшить нагрузку на редакторов информационного контента.Если вам не нужно создавать собственный контент, вы также можете разместить все это в программе AI.
  • Важный анализ интеллектуального анализа данных и применение конкурирующих компаний
    • Важные бизнес-данные конкурирующих платформ, такие как: информация о модели автомобиля дома X, информация об отеле, где находится X, информация о товарах, возвращенная на X.com, ...
    • Просканируйте важные данные конкурирующих продуктов, отфильтруйте и обработайте данные, а затем отобразите их в бизнесе, увеличьте объем бизнес-данных и уменьшите нагрузку на редактор операций этого ресурса.
  •  …

разработка краулеров

  • Сканер разработки Python (рекомендуется)
    • Начало работы также относительно простое, код короткий и скудный, а различные модули и фреймворки удобны для разработки поисковых роботов.
  • Другие языки
    • На многих языках также можно разрабатывать краулеры, но они не очень всеобъемлющие.Они используются в соответствии с реальным стеком технологий и сценариями разработки.Языки — это только инструменты, а идеи — общие.

Основные навыки для рептилий

Чтобы заниматься разработкой поисковых роботов, вам необходимо иметь относительно всестороннее и глубокое понимание WEB, чтобы вы могли быть полезными, когда позже столкнетесь с антикраулерами.

  • понимать HTML
    • Будут использовать теги HTML для создания страниц, знать, как анализировать теги в модели DOM и извлекать желаемое содержимое данных.
  • Узнать о CSS
    • Понимать CSS и анализировать содержимое данных в стиле
  • Узнать о JS
    • Базовый синтаксис JS, может писать и читать, а также понимать библиотеки JS: Jquery, Vue и т. д., может использовать инструменты разработчика для отладки JS.
  • Понимание JSON
    • Понимание данных JSON, сериализация и десериализация данных, а также получение содержимого данных путем анализа объектов JSON.
  • Узнать о HTTP/HTTPS
    • Способность анализировать информацию о запросах и информацию об ответах, а также создавать запросы с помощью кода.
  • будет регулярно анализироваться
    • Извлеките желаемое содержимое данных с помощью регулярного выражения, соответствующего строкам, которые соответствуют правилам.
  • операции с базой данных
    • Храните просканированные данные с помощью операций с базой данных, таких как: синтаксис MYSQL.
  • Будет использовать инструмент захвата пакетов
    • Инструмент отладки разработчика браузера F12 (рекомендуется: Google), столбец Network (сеть) может получать информацию о захвате пакетов
    • Инструменты: Charles, Fiddler (с возможностью захвата HTTPS, захвата APP)
    • Интерфейс данных или адрес можно отфильтровать с помощью инструмента захвата пакетов, а информацию о запросе и информацию об ответе можно проанализировать, чтобы найти поле или HTML-тег, в котором находятся данные.
  • использовать инструменты разработчика
    • Браузер F12, чтобы открыть инструменты разработчика
    • Необходимо использовать инструменты разработчика для отладки HTML, CSS, JS
  • будет имитировать запрос
    • Инструменты: Чарльз, Скрипач, Почтальон
    • Моделируя запрос, анализируйте необходимую информацию, требуемую запросом, такую ​​​​как: параметры, файлы cookie, заголовки запроса, знайте, как имитировать запрос, и знайте, как его построить при кодировании.
  • Может найти данные
    • Данные находятся в API: внешнее/собственное приложение запрашивает API данных, большая часть данных, возвращаемых API, находится в формате JSON, а затем обрабатывается и отображается.
    • Данные в HTML: проверьте исходный HTML-код страницы. Если в исходном коде есть данные, которые вы хотите получить, это означает, что данные были связаны в HTML на стороне сервера.
    • Данные находятся в коде JS: проверьте исходный код HTML страницы.Если полученные данные не в HTML и API данных не запрашивается, вы можете проверить, привязаны ли данные к переменной JS.
  • развернет
    • Его можно развернуть на серверах Windows или Linux, использовать инструменты для мониторинга процесса обхода, а затем выполнять регулярное обучение ротации и сканирование.

Навыки противостояния рептилиям

Антикраулеры можно разделить на服务端限制а также前端限制
服务端限制: Ограничение запросов строк на стороне сервера, чтобы сканеры не могли запрашивать данные.
前端限制: внешний интерфейс использует теги CSS и HTML, чтобы вмешиваться и скрывать ключевые данные, чтобы сканеры не могли легко получить данные.

Установите заголовок запроса (服务端限制)

  • Referer
  • User-Agent
  •  …

Правила подписи (服务端限制)

  • Если это запрос, инициированный JS, правила подписи можно найти в функции JS, а затем подпись строится по правилам
  • Если это запрос, инициированный APP, это может быть внешний интерфейс, вызывающий метод нативной инкапсуляции, или инициированный нативно.Это относительно неразрешимо, и пакет APP необходимо декомпилировать, что может не увенчаться успехом.

задержка или случайная задержка (服务端限制)

  • Если запрос ограничен, рекомендуется попробовать задержку запроса, конкретная задержка составляет xxx миллисекунд/x секунд, а соответствующее время устанавливается в соответствии с реальной ситуацией.

IP-адрес прокси (服务端限制)

  • Если отложенный запрос по-прежнему ограничен или его необходимо отложить на долгое время, чтобы он не был ограничен, вы можете рассмотреть возможность использования прокси-IP и использовать его в соответствии с реальной сценой и законом ограничений. в основном обходит ограничение
  • В настоящее время существует множество платформ прокси IP-сервисов, которые взимают плату, и существуют различные методы обслуживания.Вы можете найти подробную информацию.Сборы, как правило, находятся в приемлемом диапазоне.

Ограничения входа (服务端限制)

  • Запрос на получение информации о файлах cookie вошедшего в систему пользователя
  • Если срок действия информации файла cookie вошедшего в систему пользователя истекает в течение фиксированного периода времени, вам необходимо найти интерфейс входа в систему, имитировать вход в систему, сохранить файл cookie, а затем инициировать запрос данных и повторить этот шаг после истечения срока действия файла cookie.

Ограничения капчи (服务端限制)

  • Простой проверочный код, позволяющий идентифицировать и читать буквы или цифры на картинке, можно реализовать с помощью модуля пакета распознавания картинок
  • Если проверочный код сложный и не может быть идентифицирован с помощью распознавания изображений, вы можете рассмотреть возможность использования стороннего сервиса тарификации.

Предел вмешательства обфускации CSS/HTML (前端限制)

Фронтенд вмешивается и путает ключевые данные через CSS или HTML-теги.Чтобы взломать, нужно сэмплировать и анализировать, находить правила, а затем заменять их правильными данными.

1 .шрифт, интерференция пользовательского шрифта

Например, столбцы:Car X Home на постах,кот х фильм рейтинг фильма

<!--css-->
<!--找到://k3.autoimg.cn/g13/M05/D3/23/wKjByloAOg6AXB-hAADOwImCtp047..ttf--> 
<style>
    @font-face {font-family: 'myfont';src: url('//k2.autoimg.cn/g13/M08/D5/DD/wKgH41oAOg6AMyIvAADPhhJcHCg43..eot');src: url('//k3.autoimg.cn/g13/M08/D5/DD/wKgH41oAOg6AMyIvAADPhhJcHCg43..eot?#iefix') format('embedded-opentype'),url('//k3.autoimg.cn/g13/M05/D3/23/wKjByloAOg6AXB-hAADOwImCtp047..ttf') format('woff');}
</style>

<!--html-->
<!--会员招募中-->
<div> Mercedes C+ 会员招募<span style='font-family: myfont;'></span></div>

<!--
    从html中获取【html中文编码】=
    然后解析ttf文件得到【ttf中文编码】列表
    匹配发现【ttf中文编码】=uniF159可以与【html中文编码】=匹配,在第7个,第7个中文就是"中"
    (抽样分析会发现ttf中中文位置是固定的,中文编码是动态变化的,所以只要映射出【ttf中文编码】索引就可以知道中文字符了)
-->

Разрушение идей:
Найдите адрес файла шрифта ttf, загрузите его, используйте пакет модуля анализа шрифтов для анализа файла ttf, проанализируйте набор кодов шрифтов, сопоставьте его с текстовым кодом в dom, а затем сопоставьте его в соответствии с серийный номер закодирован в китайском языке ttf

Вы можете использовать инструмент FontForge/FontCreator для открытия файлов ttf для анализа.


2 .Псевдоэлемент скрыт

Используйте псевдоэлементы для отображения важных данных
Например:Автомобиль Х Главная

<!--css-->
<style>
.hs_kw60_configod::before {
    content: "一汽";
}
.hs_kw23_configod::before {
    content: "大众";
}
.hs_kw26_configod::before {
    content: "奥迪";
}
</style>

<!--html-->
<div>
    <span class="hs_kw60_configod"></span>
    -
    <span class="hs_kw23_configod"></span>
    <span class="hs_kw26_configod"></span>
</div> 

Разрушение идей:
Найдите файл стиля, а затем замените содержимое содержимого в соответствующем классе в CSS в соответствии с именем класса в теге HTML.


3 . backgroud-image

Отображение чисел/символов через смещение позиции фонового изображения, например: цена, рейтинг и т. д.
Отображение на основе значения background-position и номера изображения


4 .вмешательство в HTML-тег

Препятствовать сбору данных, добавляя теги скрытого содержимого к тегам важных данных.
Например:прокси-платформа xxIP

<!--html-->
<td class="ip">
    <p style="display:none;">2</p>
    <span>2</span>
    <span style="display:inline-block;"></span>
    <div style="display: inline-block;">02</div>
    <p style="display:none;">.1</p>
    <span>.1</span>
    <div style="display:inline-block;"></div>
    <span style="display:inline-block;"></span>
    <div style="display:inline-block;">09</div>
    <span style="display: inline-block;">.</span>
    <span style="display:inline-block;">23</span>
    <p style="display:none;">7</p>
    <span>7</span>
    <p style="display:none;"></p>
    <span></span>
    <span style="display: inline-block;">.</span>
    <div style="display: inline-block;"></div>
    <p style="display:none;">3</p>
    <span>3</span>
    <div style="display: inline-block;">5</div>:
    <span class="port GEA">80</span>
</td>
<!--js-->
<script>
    $(".ip:eq(0)>*:hidden").remove()
    $(".ip:eq(0)").text()
</script>
<!--
    输出:202.109.237.35:80
    通过移除干扰标签里有display:none隐藏标签,然后再获取text就不会有干扰的内容了
-->

Разрушение идей:
Отфильтруйте теги HTML, которые мешают запутыванию, или читайте только содержимое тегов HTML, которые являются допустимыми данными.

看穿一切

... (Насколько велика антирептильная дыра в мозгу, насколько непристойна идея демонтажа антирептилий)


Для предотвращения отравления

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

Суммировать

别怪我没提醒你

  1. В настоящее время большинство малых и средних платформ имеют относительно слабую осведомленность о защите от краулеров, что привело к преобладанию краулеров.С помощью краулеров они могут получить больше преимуществ при относительно небольших затратах.
  2. Добыча, анализ и применение данных о конкурирующих продуктах играют ключевую роль в росте бизнеса, а разработка поисковых роботов является важной технологией для компаний, производящих интернет-продукты.
  3. В настоящее время нет технологии, которая может полностью избежать краулеров, поэтому добавление стратегии против краулеров просто увеличивает определенный порог сложности.Пока технология демонтажа достаточно сложна, ее все еще можно преодолеть.
  4. Анти-рептилия и анти-анти-рептилия - это состязание технологий, и эта война без пороха никогда не закончится. (Почему программисты должны смущать программистов)

код для справки

Синтаксический анализ шрифтов C# и реализация Python

  • C#
/// 需要引入PresentationCore.dll
private void Test() {
            string path = @"F:\font.ttf";
            //读取字体文件             
            PrivateFontCollection pfc = new PrivateFontCollection();
            pfc.AddFontFile(path);
            //实例化字体
            Font f = new Font(pfc.Families[0], 16);
            //设置字体
            txt_mw.Font = f;

            //遍历输出
            var families = Fonts.GetFontFamilies(path);
            foreach (System.Windows.Media.FontFamily family in families) {
                var typefaces = family.GetTypefaces();
                foreach (Typeface typeface in typefaces) {
                    GlyphTypeface glyph;
                    typeface.TryGetGlyphTypeface(out glyph);
                    IDictionary<int, ushort> characterMap = glyph.CharacterToGlyphMap;
                    var datas = characterMap.OrderBy(d => d.Value).ToList();
                    foreach (KeyValuePair<int, ushort> kvp in datas) {
                        var str = $"[{kvp.Value}][{kvp.Key}][{(char)kvp.Key}]\r\n";
                        txt_mw.AppendText(str);
                    }
                }
            }

        }
  • python
# pip install TTFont
from fontTools.ttLib import TTFont
from fontTools.merge import *
me = Merger()
font = TTFont('./font.ttf')
cmaps = font.getBestCmap()
orders = font.getGlyphOrder()
# font.saveXML('F:/1.xml')
print cmaps
print orders



саморекомендация


для справки

Если вам есть что сказать, пожалуйста, оставьте сообщение
Пожалуйста, указывайте оригинальный адрес при перепечатке, спасибо за сотрудничество

Старые утюги обратите внимание на мой публичный аккаунт WeChat «Dahua WEB Development» и следите за моими оригинальными сообщениями в блоге.

Время от времени рекомендуйте технические посты в блогах, связанные с WEB-разработкой, поощряйте и общайтесь друг с другом! QR-код↓

我的公众号