Путешествие по тысяче приложений начинается с нажатия одной клавиши…

Обзор

Пример кода

Если вы когда-либо хотели создать веб-краулер, Python — отличный язык для его создания. Python очень лаконичен, широко распространен на разных платформах и имеет множество библиотек, связанных с сетью и синтаксическим анализом, которые вы можете использовать. Этот пост расскажет о начале создания поискового робота, функции, которая собирает URL-адреса с сайтов. В этом примере я буду использовать библиотеки Requests, sys и re.

Установка необходимых компонентов

Если у вас нет большого опыта работы с HTTP или Python, Requests — отличная библиотека для начала. Если библиотека Requests еще не установлена ​​на вашем компьютере, сделайте это с помощью pip:

pip install requests

Модули Python

Запросы

Создатели Запросов называют это HTTP для людей, и это именно то, чем он является. Это одно из самых красивых произведений кода, с которыми мне приходилось сталкиваться. Он отлично читается и логично построен. В сообществе Python есть слово, чтобы описать это: Pythonic.

Хорошее определение для Pythonic, с которым я столкнулся, это:

Использование возможностей языка Python для создания ясного, лаконичного и удобного в сопровождении кода. Python означает код, который не только правильно понимает синтаксис, но и следует соглашениям сообщества Python и использует язык так, как он предназначен для использования.

система

Я хочу настроить наш скрипт Python, чтобы мы могли указать наш URL-адрес непосредственно из командной строки следующим образом:

python linkcrawler.py www.google.com

Документация в стандартной библиотеке Python для sys называет это: Системные параметры и функции. В этом случае мы собираемся использовать его для доступа к URL-адресу, который вводится, когда наш файл вызывается в командной строке с использованием Команда .argv. Метод sys.argv возвращает массив строк для всего, что вводится после слова python. Каждая дополнительная запись в командной строке получает свой индекс. Таким образом, при вводе sys.argv[0] интерпретатор вернет нам linkcrawler.py, а sys.argv[1] даст нам www.google.com.

Классы в Python

Создание классов в Python интересно немного по-другому, чем в Swift.

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

По сравнению с другими языками программирования механизм классов Python добавляет классы с минимумом нового синтаксиса и семантики. Это смесь механизмов классов C++ и Modula-3. Классы Python предоставляют все стандартные функции объектно-ориентированного программирования: механизм наследования классов позволяет использовать несколько базовых классов, производный класс может переопределять любые методы своего базового класса или классов, а метод может вызывать метод базового класса с тем же именем. . Объекты могут содержать произвольное количество и типы данных. Как и в случае с модулями, классы обладают динамической природой Python: они создаются во время выполнения и могут быть изменены после создания.

Чтобы определить его, поставьте перед именами классов слово class и поставьте двоеточие в конце объявления. Что делает классы в Python интересными, так это то, что вы должны передавать себя в качестве параметра в каждом функциональном блоке. Чтобы дать нашему классу метод инициализации, нам нужно добавить ‘init(self)’:

Указание self в качестве параметра не является обязательным, если вы пропустите self, вы получите эту ошибку:

TypeError: __init__() takes no arguments (1 given)

В методе init мы можем создать экземпляр свойств нашего класса. В этом случае я дал классу свойство URL:

self.url = sys.argv[1]

При этом используется метод sys.argv, о котором мы говорили ранее, для получения URL-адреса, который вводится при запуске файла.

Методы Python

Большая часть логики этой части будет реализована в методе, который я назвал request_resource.

Этот метод также принимает self в качестве параметра. Мы устанавливаем нашу переменную r в результаты HTTP-запроса GET к URL-адресу, который мы указали изначально. Используя re.findall, мы просматриваем r.text для текста, который соответствует шаблонам URL. Они хранятся в нашей переменной URL и возвращаются в конце метода.

Модуль Python

Модуль Python re входит в стандартную библиотеку Python и предоставляет языку Perl-подобные шаблоны регулярных выражений. Регулярные выражения — это способ указания определенных шаблонов в строках.

Статья в Википедии о регулярных выражениях: Регулярное выражение, регулярное выражение или регулярное выражение[1] (иногда называемое рациональным выражением) — это в теоретической информатике и теории формального языка последовательность символов, определяющая шаблон поиска. Обычно этот шаблон затем используется алгоритмами поиска строк для операций «найти» или «найти и заменить» над строками.

Регулярное выражение может соответствовать номеру телефона или адресу электронной почты или, в данном случае, URL-адресам. Эта странно выглядящая строка представляет собой шаблон регулярного выражения для сопоставления текста с URL-адресами:

'http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+'

Подведение итогов

Теперь, когда мы закончили с нашим классом, нам нужно добавить основную функцию, которая будет вызываться, когда наш файл запускается непосредственно из командной строки. В основном нам нужно будет создать экземпляр нашего класса, вызвать наш метод request_resource, а пока просто распечатать URL-адреса, если они существуют.

После того, как мы выяснили нашу основную функцию, теперь нам нужно убедиться, что она вызывается при запуске файла. Мы можем добавить немного магии if name, чтобы правильно настроить все это.

if __name__ == '__main__':
    main()

Здесь мы указываем, что если Python вызывает наш файл напрямую (if name == ‘main’:), он должен запускать основную функцию нашего файла. Это отличается от случая, когда он импортируется в другой файл и вызывается, и ему требуется спецификация, чтобы мы могли запустить его из командной строки.

Если вы все сделали правильно, это должно выглядеть примерно так: