Рубрики
Без рубрики

Пока Bye 403 – Создание фильтрованного устойчивого веб-граверсина Часть III: Агенты пользователей

Маскируя не только ваш IP, но ваш браузер? Теги с Python, учебником, учебником, Datascience, обсудить.

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

Представьте, что кто-то беспокоит вас на любой социальной медиа-платформе, и вы их заблокировали. Давайте скажем, что вы влияете, поэтому вы получаете сотни следует каждый день, и это действительно трудно сделать «проверку профиля» каждого последователя, чтобы убедиться, что они не тот, кто заблокировал. Что было бы самым простым способом сделать предварительную предположение? Очевидно, что проверка названия новых подписчиков будет ваша первая строка защиты. Ну что если кто-то с тем же именем и изображением профиля подписались на вас? Будет ли тот факт, что их фрагмент профиля перечислил их как быть из другой страны, чем прежде, чем остановить вас сразу блокировать их? Скорее всего, не. По всей вероятности, это сделало бы вас более подозрительными в этом человеке, потому что они обманывают.

Подумайте о веб-сервере Bot Filter, как «влияющий с раздражающим последователем». На велосипеде нашего IP-адреса мы изменяем наш соответствующий идентификатор местоположения и «Phanie Pic», но мы все еще перечислены в виде соединения из одного типа ноутбука, с одной и той же версией ОС, из того же браузера и т. Д. Это довольно легко привязываться и фильтровать. Так что, что нужно сделать почковым сетью? Цикл своего пользовательского агента.

Пользовательский агент по существу является полем в ваших заголовках HTTP/S, который сообщает веб-серверу версии браузера, версию Host OS, форм-фактор хоста, и некоторые другие небольшие тидбиты по поводу каждого запроса. Это служит двух целям: диагностика веб-контента (чтобы увидеть, сообщается ли определенная ошибка только на определенных ОС, браузерах или некоторой комбинации двух) и безопасности (чтобы увидеть, кто связан и что они соединяются от отслеживания возможных преступников во время и/или после инцидента безопасности). Таким образом, в терминах Lamen пользовательский агент говорит веб-серверу о подключении машины, тогда как IP-адрес рассказывает о том, откуда вы идете. Иметь смысл? Хороший!

Чтобы начать велосипедные пользовательские агенты, голова здесь Для современной коллекции настольных пользовательских агентов:

Pro Tip: Мы также можем соскрести мобильные версии веб-сайтов, изменив пользовательский агент. Это на самом деле, как работает параметр «Show Desktop Site» на мобильных браузерах. Браузер будет отображаться своим пользователем агентом, как если бы он пришел с настольного устройства, несмотря на то, что вы находитесь на мобильном, что показывает вам «версию на рабочем столе» любого содержимого. То же самое работает в обратном порядке для соскабливания контента только на мобильном

Теперь мы могли бы просто скопировать/вставлять все эти пользователевые агенты в файл, но это веб-серия STOW STAGE, поэтому вместо этого создайте новый файл проекта и вызовите его user_agent.py

from bs4 import BeautifulSoup

import random
import requests

class UserAgent:

    ua_source_url='https://deviceatlas.com/blog/list-of-user-agent-strings#desktop'

    def __init__(self):
        self.new_ua = random.choice(self.get_ua_list())

Итак, сначала мы делаем класс UserAgent. Если вы сделали это далеко в серию, вы, вероятно, можете собрать, что я большой поклонник инкапсуляции. Это в значительной степени из-за прихода из сетевых инженерных и информационных технологий, прежде чем я начал писать код там, где предполагается, что инцидент разбудит вас каждый раз, когда вы находитесь на звонке, не ранее, чем на 4 утра. Из-за этого я огромный поклонник создания вещей, которые легко отлажены. Граниться в 4, добраться до офиса к 4:30, и покинув 4:45, чтобы на самом деле иметь некоторое видимость утра с моей семьей, предпочтительнее 3 часов, чтобы исправить простую проблему, которая была похоронена под слоями мусора. Потому что, если это займет у меня 3 часа, то я решил мою проблему к 7:30. Вы знаете, как раз вовремя начать «нормальную» работу на день …

Что говорится, что класс пользовательского агента собирается обрабатывать все вещи пользователей-агента для нас! Переменная класса мы создали ua_source_url за пределами __init__ Функция, как вы могли заметить. Это почему? Потому что все внутри __init__ Только «существует» после того, как экземпляр класса называется (AKA создается) в вашем коде. Переменные на уровне класса могут быть упомянутыми напрямую и важнее, совместно используются всеми случаями этого класса. Значение Когда мы многолетним этот плохой мальчик, нам не придется хранить эту конкретную строку в памяти более одного раза.

В нашей __init__ Функция – это new_ua Свойство, которое мы хотим отличаться для каждого экземпляра этого класса, но не быть вступившим в существование, пока класс не будет создан.

Примечание: Для дальнейшего понимания __в этом__ Что это делает, и как его использовать, придерживаться. Существует пост на это очень скоро!

new_ua Свойство выбирает случайное пользовательское агент из списка пользовательских агентов. Где мы получим этот список, вы спрашиваете? Из кода ваш о том, чтобы ввести:

def get_ua_list(self, source=ua_source_url):
    r = requests.get(source)
    soup = BeautifulSoup(r.content, "html.parser")
    tables = soup.find_all('table')
    return [table.find('td').text for table in tables]

Так что мы здесь сделали? Ну, мы соскреблировали страницу выше (как мы делаем) для пользовательской информации, указанной на этой странице. Как и со всеми нашими маленькими соскобными сценариями, он начал с запросов Получить () Функция, подавающая контент ответа на наш HTML Parser (BeautiveSoup), нашел разметку таблицы для каждого пользовательского агента и извлекил текст данных каждой таблицы. Теперь, когда эта функция завершена, делает __init__ Сделайте немного больше смысла? Если нет, позвольте мне объяснить:

Как только мы создадим экземпляр класса USERAGENT в любой точке нашего кода, он запускает эту функцию без нас, нуждающихся в его дотронении. Когда функция завершится, она присваивала список потенциальных пользовательских реагированных в свойство new_ua. . Как это актуально? Посмотрите на захват экрана терминала ниже, который показывает выход следующего кода:

i=1
while i <= 4:
    print(UserAgent().new_ua)
    i+=1

Как видите, нам не нужно писать пользовательские агенты в файл, который включает в себя открытие файла, чтение его, затем снова закрывая его, полагаясь на дисковую память. Вместо этого мы прочитаем этот список в RAM (тем более быстрее, упрощенно чистым хранилищем) и извлеките его только тогда, когда нам это нужно, получают другой пользовательскийAgent каждый раз через Random.Choice () функция

Pro Tip: Для тех из вас, кто незнаком Random.Coice () , он в основном делает то же самое при выборе из списка или потенциала как Random.randint (0, Len (Samble_List))) . Проще говоря, он выбирает псевдослучайный элемент из любой передаваемой структуры данных, которую вы проходите к нему. В таких случаях, как это, Random.Coice () это мое предпочтение, потому что оба подхода делают примерно то же самое и .выбор() меньше нажатий клавиш.

Хорошо, mavericks (сезон дрифтеров любого 😉) У вас есть инструменты для дурака 99% фильтров бота. Но вы знаете, как их использовать? Войдите в дикую природу и узнайте, затем сообщите. Я хотел бы услышать ваши истории о наборах ваших собраний и что вы планируете с ними делать! Успехи и неудачи одинаково приветствуются, потому что это завершает первый набор контрмеров, которые мы собираемся обнаружить. Они называются (по крайней мере, мной) как «тяжелые навыки» веб-соскоба. Навыки, которые нам нужно развивать наши знания. Но как твои инстинкты? Узнайте следующую неделю в части четырех, когда мы ломаемся в промежуточные вещи: Сроки и дросселирование!

Оригинал: “https://dev.to/kaelscion/bye-bye-403—building-a-filter-resistant-web-crawler-part-iii-user-agents-3453”