[Борьба за разработку поискового робота на Python3] Основы 2-Crawler 1-Основные принципы HTTP

Python сервер HTTP рептилия браузер
[Борьба за разработку поискового робота на Python3] Основы 2-Crawler 1-Основные принципы HTTP

В этом разделе мы более подробно рассмотрим основы HTTP и посмотрим, что происходит между вводом URL-адреса в браузере и получением содержимого веб-страницы. Понимание этого содержания поможет нам лучше понять основные принципы работы поискового робота.

1. URI и URL-адреса

Здесь мы сначала понимаем URI и URL.Полное имя URI — универсальный идентификатор ресурса, который является универсальным идентификатором ресурса, а полное имя URL-адреса — универсальный указатель ресурса, который является универсальным указателем ресурса.

Например,github.com/favicon.ico— это ссылка на фавикон GitHub, которая представляет собой URL и URI. То есть такой ресурс иконки есть, и мы используем URL/URI для однозначного указания его метода доступа, который включает в себя протокол доступа https, путь доступа (/ то есть корневой каталог) и имя ресурса favicon.ico. По такой ссылке мы можем найти этот ресурс в Интернете, который является URL/URI.

URL-адрес является подмножеством URI, то есть каждый URL-адрес является URI, но не каждый URI является URL-адресом. Итак, какой URI не является URL? URI также включает подкласс под названием URN, полное имя которого — универсальное имя ресурса, то есть универсальное имя ресурса. URN только называет ресурсы и не указывает, как найти ресурсы. Например, urn:isbn:0451450523 указывает ISBN книги, который может однозначно идентифицировать книгу, но не указывает, где найти книгу. Это URN. Связь между URL, URN и URI можно представить на рис. 2-1.

Рисунок 2-1 Диаграмма взаимосвязи URL, URN и URI

Но в современном Интернете URN используется очень редко, поэтому почти все URI являются URL-адресами. Мы можем называть общие ссылки на веб-страницы либо URL-адресами, либо URI. Лично я называю их URL-адресами.

2. Гипертекст

Далее давайте разберемся с понятием - гипертекст, его английское название - гипертекст, веб-страницы, которые мы видим в браузере, анализируются из гипертекста, а исходный код веб-страницы представляет собой серию HTML-кодов, которые содержат ряд меток, Такие какimgотображать изображение,pУказывает на отображение абзацев и т. д. После того, как браузер проанализирует эти теги, будет сформирована веб-страница, которую мы обычно видим, а исходный HTML-код веб-страницы можно назвать гипертекстом.

Например, мы можем открыть любую страницу в браузере Chrome, такую ​​как домашняя страница Taobao, щелкнуть правой кнопкой мыши в любом месте и выбрать пункт «Проверить» (или напрямую нажать комбинацию клавиш F12), чтобы открыть инструменты разработчика браузера. , вы можете увидеть исходный код текущей веб-страницы.Эти исходные коды являются гипертекстовыми, как показано на рисунке 2-2.

Рисунок 2-2 Исходный код

3. HTTP и HTTPS

На главной странице Таобаоwww.taobao.com/, в начале URL-адреса будет http или https, что является типом протокола, необходимого для доступа к ресурсу. Иногда мы также видим URL-адреса, начинающиеся с ftp, sftp и smb, которые являются типами протоколов. В сканерах страницы, которые мы сканируем, обычно используют протоколы http или https. Здесь давайте сначала разберемся в значении этих двух протоколов.

Полное название HTTP — протокол передачи гипертекста, а китайское название — протокол передачи гипертекста. Протокол HTTP — это протокол передачи гипертекстовых данных из сети в локальный браузер, что обеспечивает эффективную и точную доставку гипертекстовых документов. HTTP — это спецификация, разработанная совместно Консорциумом World Wide Web (Консорциум World Wide Web) и Рабочей группой Интернета (IETF) (Internet Engineering Task Force).В настоящее время широко используется HTTP 1.1.

Полное название HTTPS — протокол передачи гипертекста по протоколу защищенных сокетов, который является безопасным каналом HTTP.

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

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

Сейчас все больше и больше веб-сайтов и приложений переходят на HTTPS, например:

  • Apple заставляет все приложения iOS использовать шифрование HTTPS до 1 января 2017 года, иначе приложение не будет доступно в App Store;
  • Начиная с Chrome 56, который был запущен в январе 2017 года, Google отображает предупреждение о риске для URL-ссылок, не зашифрованных с помощью HTTPS, то есть видное место в адресной строке напоминает пользователям, что «эта веб-страница не защищена».
  • Официальный документ с требованиями апплета Tencent WeChat требует, чтобы в фоновом режиме использовались HTTPS-запросы для сетевой связи, а доменные имена и протоколы, которые не соответствуют условиям, не могут быть запрошены.

Хотя некоторые веб-сайты используют протокол HTTPS, браузер все равно будет сообщать им о небезопасности.Например, мы открываем 12306 в браузере Chrome, а ссылка такая:www.12306.cn/, то браузер выдаст сообщение «Ваше соединение не является частным», как показано на рис. 2-3.

Рисунок 2-3 Страница 12306

Это связано с тем, что сертификат CA 12306 выдается Министерством железных дорог Китая самостоятельно, и этому сертификату не доверяет агентство CA, поэтому проверка сертификата здесь не пройдет и не подскажет это, но на самом деле его передача данных все еще через SSL Encrypted. Если вы хотите сканировать такой сайт, вам нужно установить опцию игнорирования сертификата, иначе он выдаст ошибку ссылки SSL.

4. Процесс HTTP-запроса

Мы вводим URL-адрес в браузере и нажимаем Enter, чтобы просмотреть содержимое страницы в браузере. По сути, этот процесс заключается в том, что браузер отправляет запрос на сервер, на котором находится сайт, после получения запроса сервер сайта обрабатывает и анализирует его, после чего возвращает соответствующий ответ, после чего отправляет его обратно в браузер. Ответ содержит исходный код страницы и другое содержимое, и браузер анализирует его для отображения страницы Модель показана на рисунке 2-4.

Рисунок 2-4 Схема модели

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

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

Откройте браузер Chrome, щелкните правой кнопкой мыши и выберите пункт «Проверить», чтобы открыть инструменты разработчика браузера. Посетите Байду здесьwww.baidu.com/, введите URL-адрес и нажмите Enter, чтобы посмотреть, какие сетевые запросы возникают во время этого процесса. Видно, что в нижней части страницы «Сеть» одна за другой расположены записи, одна из которых представляет собой процесс отправки запроса и получения ответа, как показано на рис. 2-5.

Рисунок 2-5 Сетевая панель

Давайте сначала рассмотрим первый сетевой запрос — www.baidu.com.

Значения столбцов следующие.

  • Имя первого столбца: Имя запроса, обычно в качестве имени используется последняя часть URL.
  • Второй столбец Статус: код состояния ответа, показанный здесь как 200, указывает, что ответ нормальный. По коду состояния мы можем судить, получили ли мы нормальный ответ после отправки запроса.
  • Третий столбец Тип: запрашиваемый тип документа. Вот документ, что означает, что на этот раз мы запрашиваем HTML-документ, а его содержимое — некоторый HTML-код.
  • Четвертая колонка Инициатор: Источник запроса. Используется для обозначения того, какой объект или процесс инициировал запрос.
  • Пятая колонка Размер: файл, загруженный с сервера, и запрошенный размер ресурса. Если ресурс получен из кеша, столбец будет отображаться из кеша.
  • Шестой столбец Время: общее время, прошедшее с момента отправки запроса до получения ответа.
  • Седьмая колонна Водопад: Визуальный водопад сетевых запросов.

Нажмите на эту запись, чтобы увидеть более подробную информацию, как показано на рисунке 2-6.

Рисунок 2-6 Детали

Первая — это общая часть, «URL-адрес запроса» — это запрошенный URL-адрес, «Метод запроса» — это метод запроса, «Код состояния» — это код состояния ответа, «Удаленный адрес» — это адрес и порт удаленного сервера, а «Политика реферера» — это стратегия дискриминации реферера.

Глядя ниже, вы можете увидеть, что есть заголовки ответа и заголовки запроса, которые представляют заголовки ответа и заголовки запроса соответственно. Заголовок запроса содержит много информации о запросе, такую ​​как идентификатор браузера, файлы cookie, хост и другую информацию, которая является частью запроса.Сервер определит, является ли запрос законным, на основе информации в заголовке запроса, а затем сделает соответствующий ответ. Заголовки ответа, показанные на рисунке, являются частью ответа. Например, они содержат такую ​​информацию, как тип сервера, тип документа и дату. После того, как браузер получит ответ, он проанализирует содержимое ответа и затем отображать содержимое веб-страницы.

Давайте посмотрим, что содержат запрос и ответ.

5. Запрос

Запрос, отправляемый клиентом на сервер, можно разделить на четыре части: метод запроса, URL-адрес запроса, заголовки запроса и тело запроса.

(1) Метод запроса

Существует два распространенных метода запроса: GET и POST.

Введите URL-адрес непосредственно в браузере и нажмите Enter, который инициирует запрос GET, а параметры запроса будут непосредственно включены в URL-адрес. Например, ищите Python в Baidu, это GET-запрос, ссылкаwww.baidu.com/s?wd=Python, URL-адрес содержит информацию о параметре запроса, этот параметрwdУказывает ключевое слово для поиска. Запросы POST в основном выполняются при отправке формы. Например, для формы входа после ввода имени пользователя и пароля нажмите кнопку «Войти», которая обычно инициирует POST-запрос, а данные обычно передаются в виде формы, не отражаясь в URL.

Методы запросов GET и POST имеют следующие отличия.

  • Параметры в GET-запросе содержатся в URL, а данные можно увидеть в URL, в то время как URL POST-запроса не содержит этих данных, данные передаются в виде формы и будут включены в тело запроса.
  • Данные, отправленные запросом GET, составляют не более 1024 байт, а метод POST не имеет ограничений.

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

Большинство запросов, с которыми мы обычно сталкиваемся, являются запросами GET или POST, а также есть некоторые методы запросов, такие как GET, HEAD, POST, PUT, DELETE, OPTIONS, CONNECT, TRACE и т. д. Мы просто суммируем их в таблице 2-1. .

Таблица 2-1 Другие методы запроса

метод

описывать

GET

Запросить страницу и вернуть содержимое страницы

HEAD

Аналогичен запросу GET, за исключением того, что в возвращаемом ответе нет определенного содержимого, которое используется для получения заголовка.

POST

В основном используется для отправки форм или загрузки файлов, данные включаются в тело запроса.

PUT

Данные, переданные от клиента на сервер, заменяют содержимое в указанном документе.

DELETE

Запросить сервер удалить указанную страницу

CONNECT

Используйте сервер в качестве трамплина и позвольте серверу получать доступ к другим веб-страницам вместо клиента.

OPTIONS

Позволяет клиентам просматривать производительность сервера

TRACE

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

Ссылки на эту таблицу:ууууууууууууууууууууууууууууууууууууууууууу..

(2) Запрошенный URL-адрес

Запрошенный URL-адрес, URL-адрес универсального указателя ресурсов, может однозначно идентифицировать ресурс, который мы хотим запросить.

(3) Заголовок запроса

Заголовок запроса используется для описания дополнительной информации, которую должен использовать сервер, наиболее важной информацией является Cookie, Referer, User-Agent и т. д. Некоторые часто используемые заголовки кратко описаны ниже.

  • Accept: поле заголовка запроса, указывающее, какие типы информации может принимать клиент.
  • Accept-Language: указывает тип языка, приемлемый для клиента.
  • Accept-Encoding: указывает кодировку содержимого, приемлемую для клиента.
  • Host: он используется для указания IP-адреса хоста и номера порта запрошенного ресурса, а его содержимое — это расположение исходного сервера или шлюза URL-адреса запроса. Начиная с HTTP версии 1.1, запрос должен содержать это содержимое.
  • Cookie: также часто используется во множественном числе. Файлы cookie представляют собой данные, которые веб-сайты хранят локально, чтобы идентифицировать пользователей для отслеживания сеансов. Его основная функция заключается в поддержании текущего сеанса доступа. Например, после того, как мы введем имя пользователя и пароль для успешного входа на веб-сайт, сервер будет использовать сеанс для сохранения информации о статусе входа, и каждый раз, когда мы обновляем или запрашиваем другие страницы сайта, мы обнаружим, что это находится в статусе входа в систему, что является заслугой файлов cookie. В файлах cookie есть информация, которая идентифицирует сеанс нашего соответствующего сервера.Каждый раз, когда браузер запрашивает страницу сайта, он добавляет файлы cookie в заголовок запроса и отправляет его на сервер.Сервер узнает нас через файлы cookie.И это обнаружил, что текущее состояние — это состояние входа в систему, поэтому возвращаемый результат — это содержимое веб-страницы, которое можно увидеть только после входа в систему.
  • Referer: этот контент используется для определения страницы, с которой отправлен запрос. Сервер может получить эту информацию и выполнить соответствующую обработку, такую ​​как исходная статистика, обработка против пиявки и т. д.
  • User-Agent: UA для краткости, это специальный строковый заголовок, который позволяет серверу идентифицировать операционную систему и версию, браузер и версию, используемые клиентом. Добавление этой информации при выполнении краулера может замаскировать его под браузер; если он не добавлен, он, скорее всего, будет идентифицирован как краулер.
  • Content-Type: Также называемый типом Интернет-медиа или типом MIME, в заголовке сообщения протокола HTTP он используется для указания информации о типе мультимедиа в конкретном запросе. Например, text/html означает формат HTML, image/gif — изображение GIF, а application/json — тип JSON. Дополнительные соответствия см. в этой сравнительной таблице:tool.oschina.net/commons.

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

(4) Тело запроса

Содержимое тела запроса обычно представляет собой данные формы в запросе POST, в то время как для запроса GET тело запроса пусто.

Например, здесь запрос и ответ, полученные при входе в GitHub, показаны на рис. 2-7.

Рисунок 2-7 Детали

Перед входом в систему мы заполняем информацию об имени пользователя и пароле.При отправке это содержимое будет отправлено на сервер в виде данных формы.В это время следует отметить, что Content-Type, указанный в заголовках запроса это application/x-www-form-urlencoded. Только когда Content-Type установлен на application/x-www-form-urlencoded, он будет отправлен как данные формы. Кроме того, мы также можем установить для Content-Type значение application/json для отправки данных JSON или установить значение multipart/form-data для загрузки файлов.

В таблице 2-2 перечислены отношения между Content-Type и данными отправки POST.

Таблица 2-2 Связь между Content-Type и данными отправки POST

Content-Type

Как отправить данные

application/x-www-form-urlencoded

данные формы

multipart/form-data

загрузка файла формы

application/json

Сериализация данных JSON

text/xml

XML-данные

В сканере, если вы хотите создать запрос POST, вам нужно использовать правильный Content-Type и знать, какой Content-Type используется при настройке параметров различных библиотек запросов, иначе это может привести к тому, что POST не ответит. обычно после подачи.

6. Ответ

Ответ, возвращаемый сервером клиенту, можно разделить на три части: код состояния ответа, заголовки ответа и тело ответа.

(1) Код состояния ответа

Код состояния ответа указывает на состояние ответа сервера, например, 200 означает, что сервер отвечает нормально, 404 означает, что страница не найдена, а 500 означает, что на сервере произошла ошибка. В краулер мы можем судить о статусе ответа сервера по коду статуса, если код статуса 200, то это значит, что данные успешно возвращены, а затем выполняется дальнейшая обработка, иначе напрямую игнорируется. В Таблице 2-3 перечислены распространенные коды ошибок и причины ошибок.

Таблица 2-3 Распространенные коды ошибок и причины ошибок

код состояния

инструкция

Подробности

100

Продолжать

Запрашивающий должен продолжить выполнение запроса. Сервер получил часть запроса и ожидает остальных

101

протокол переключения

Запрашивающая сторона запросила у сервера переключение протоколов, сервер подтвердил и готов к переключению

200

успех

Сервер успешно обработал запрос

201

созданный

Запрос был выполнен успешно, и сервер создал новый ресурс

202

принятый

Сервер принял запрос, но еще не обработал его

203

Несанкционированная информация

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

204

без содержания

Сервер успешно обработал запрос, но ничего не вернул

205

сбросить содержимое

Сервер успешно обработал запрос, содержимое было сброшено

206

Часть

Сервер успешно обработал часть запроса

300

множественный выбор

В ответ на запрос сервер может выполнять различные действия

301

Переехать навсегда

Запрошенная веб-страница была постоянно перемещена в новое место, т.е. постоянное перенаправление

302

переехать временно

Запрашиваемая веб-страница временно переходит на другую страницу, то есть временно перенаправляет

303

Посмотреть другие локации

Если исходный запрос был POST, целевой документ перенаправления должен быть получен через GET.

304

немодифицированный

Веб-страница, возвращенная этим запросом, не была изменена и продолжает использовать последний ресурс.

305

использовать прокси

Запрашивающая сторона должна использовать прокси для доступа к странице.

307

Временная переадресация

Запрошенный ресурс временно отвечает из другого места

400

плохой запрос

Сервер не смог проанализировать запрос

401

несанкционированный

Запрос не был аутентифицирован или проверка не удалась

403

Нет доступа

Сервер отклонил запрос

404

не найден

Сервер не может найти запрошенную веб-страницу

405

метод отключен

Сервер отключил метод, указанный в запросе

406

не принимать

На запрошенную веб-страницу не удалось ответить запрошенным содержимым

407

Требуется авторизация через прокси

Заявитель должен использовать авторизацию через прокси

408

Истекло время запроса

Время запроса сервера истекло

409

конфликт

На сервере конфликт при выполнении запроса

410

удален

Запрошенный ресурс удален без возможности восстановления

411

требуется допустимая длина

Сервер не принимает запросы без поля заголовка длины полезной нагрузки

412

Предварительные условия не выполнены

Сервер не соответствует одному из предварительных условий, установленных запрашивающей стороной в запросе.

413

Объект запроса слишком велик

Объект запроса слишком велик и превышает возможности обработки сервера.

414

URI запроса слишком длинный

URL-адрес запроса слишком длинный для обработки сервером

415

Тип не поддерживается

Формат запроса не поддерживается запрашиваемой страницей

416

Диапазон запроса не соответствует

Страница не может предоставить запрошенную область

417

Ожидания не оправдались

Сервер не соответствует требованиям к ожидаемому полю заголовка запроса.

500

Внутренняя Ошибка Сервера

Сервер обнаружил ошибку и не смог выполнить запрос

501

не реализованы

Сервер не имеет возможности выполнить запрос

502

плохой шлюз

Сервер действует как шлюз или прокси и получил недопустимый ответ от вышестоящего сервера.

503

услуга недоступна

Сервер временно недоступен

504

Время ожидания шлюза истекло

Сервер действует как шлюз или прокси, но не получает своевременных запросов от вышестоящих серверов.

505

HTTP-версия не поддерживается

Сервер не поддерживает версию протокола HTTP, используемую в запросе.

(2) Заголовок ответа

Заголовок ответа содержит информацию об ответе сервера на запрос, такую ​​как Content-Type, Server, Set-Cookie и т. д. Некоторые часто используемые заголовки кратко описаны ниже.

  • Date: указывает время создания ответа.
  • Last-Modified: указывает время последней модификации ресурса.
  • Content-Encoding: указывает кодировку содержимого ответа.
  • Server: содержит информацию о сервере, такую ​​как имя, номер версии и т. д.
  • Content-Type: тип документа, указывает, какой тип данных возвращается, например text/html для возврата HTML-документов, application/x-javascript для возврата файлов JavaScript и image/jpeg для возврата изображений.
  • Set-Cookie: установить файлы cookie. Set-Cookie в заголовке ответа указывает браузеру поместить этот контент в файлы cookie, и следующий запрос будет содержать запрос файлов cookie.
  • Expires: укажите время истечения срока действия ответа, которое может заставить прокси-сервер или браузер обновить загруженный контент в кэш. При повторном обращении к нему его можно загрузить непосредственно из кеша, что снижает нагрузку на сервер и сокращает время загрузки.

(3) Тело ответа

Самое главное — это содержание тела ответа. Все данные ответа находятся в теле ответа. Например, когда запрашивается веб-страница, ее тело ответа представляет собой HTML-код веб-страницы, когда запрашивается изображение, его тело ответа представляет собой двоичные данные изображение. После того, как мы заставим сканер запрашивать веб-страницу, содержимое, которое нужно проанализировать, представляет собой тело ответа, как показано на рис. 2-8.

Рисунок 2-8 Содержимое тела ответа

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

При выполнении краулинга мы в основном получаем исходный код, данные JSON и т. д. веб-страницы через тело ответа, а затем извлекаем из него соответствующий контент.

В этом разделе мы узнали об основных принципах HTTP и примерно поняли процесс запроса и ответа, лежащий в основе доступа к веб-странице. Знания, затронутые в этом разделе, необходимо освоить, и они часто будут использоваться при анализе запросов веб-страницы позже.


Этот ресурс был впервые опубликован в личном блоге Цуй Цинцай Цзин Ми:Практическое руководство по разработке веб-краулера на Python3 | Цзин Ми

Если вы хотите узнать больше информации о поисковых роботах, обратите внимание на мой личный публичный аккаунт WeChat: Coder of Attack.

WeChat.QQ.com/Day/5 Это радость VE Z…(автоматическое распознавание QR-кода)