Жизнь слишком коротка, я использую Python
Предыдущий портал:
Xiaobai изучает поисковый робот Python (1): начало
Xiaobai Learns Python Crawler (3): Предварительная подготовка (2) Введение в основы Linux
Xiaobai Learns Python Crawler (4): Предварительная подготовка (3) Введение в основы Docker
Xiaobai Learns Python Crawler (5): предварительная подготовка (4) Основы базы данных
Xiaobai изучает краулер Python (6): предварительная подготовка (5) установка фреймворка краулера
Xiaobai изучает поисковый робот Python (7): основы HTTP
Xiaobai изучает поисковый робот Python (8): основа веб-страницы
Ядро краулера
Что такое краулер? Понять несложно. Сканер — это программа, которая сканирует веб-страницы, извлекает информацию по определенным правилам и повторяет описанный выше процесс автоматически и неоднократно.
Искатель, в первую очередь, сканирует веб-страницу, здесь в основном имеется в виду исходный код веб-страницы. Исходный код веб-страницы будет содержать необходимую нам информацию, и нам нужно извлечь эту информацию из исходного кода.
Когда мы запрашиваем веб-страницу, Python предоставляет нам для этого множество библиотек, таких как официальная urllib, сторонние запросы, Aiohttp и т. д.
Мы можем использовать эти библиотеки для отправки HTTP-запросов и получения данных ответа.После получения ответа нам нужно только проанализировать данные в части тела, чтобы получить исходный код веб-страницы.
После получения исходного кода наша следующая задача — разобрать исходный код и извлечь из него нужные нам данные.
Самый простой и наиболее часто используемый способ извлечения данных — это использование регулярных выражений, но этот метод более сложен и подвержен ошибкам, но я должен сказать, что человеку, который очень хорошо пишет регулярные выражения, не нужны следующие библиотеки парсинга являются универсальным подходом.
Проще говоря, регулярные выражения редактора написаны не очень хорошо, поэтому будут использоваться эти библиотеки, предоставленные третьими лицами.
Библиотеки для извлечения данных — Beautiful Soup, pyquery, lxml и др. Используя эти библиотеки, мы можем эффективно и быстро извлекать информацию о веб-странице из HTML, такую как атрибуты узлов, текстовые значения и т. д.
После извлечения данных из исходного кода мы сохраним данные, которые можно сохранить в различных формах, которые можно напрямую сохранить в виде файлов txt, json, Excel и т. д. или сохранить в базах данных, таких как Mysql, Oracle, SQLServer, MongoDB и другие.
Формат захваченных данных
Вообще говоря, мы сканируем исходный код веб-страницы в формате HTML, который представляет собой обычную и интуитивно понятную информацию веб-страницы, которую мы видим.
Однако некоторая информация не возвращается напрямую на веб-страницу вместе с HTML. Будут различные API-интерфейсы. Большинство данных, возвращаемых этим интерфейсом, теперь представлены в формате JSON, а некоторые будут возвращать данные в формате XML. интерфейсы, которые напрямую возвращают определенные программистом строки. Этот интерфейс данных API требует специального анализа конкретных проблем.
Существует также некоторая информация, например основные станции с изображениями и видеостанции (такие как Douyin, B station), информация, которую мы хотим сканировать, — это изображения или видео, которые существуют в двоичной форме, нам нужно преобразовать эти двоичные данные. Данные сканируются вниз, а затем сброшены.
Кроме того, мы также можем получить некоторые файлы ресурсов, такие как CSS, JavaScript и другие ресурсы сценариев, а некоторые также содержат информацию о шрифтах, например woff. Эта информация является незаменимым элементом веб-страницы, пока браузер имеет к ней доступ, мы можем ее просканировать.
Современный внешний веб-скрейпинг
Основной контент здесь сегодня! ! !
Много раз, когда мы используем библиотеку HTTP-запросов для сканирования исходного кода веб-страницы, информация, которую мы сканируем, полностью отличается от информации, которую мы видим на веб-странице, всего несколько коротких строк.
Это связано с тем, что в последние годы фронтенд-технологии развивались как на дрожжах, и для создания интерфейсных страниц используется большое количество фронтенд-модульных инструментов, наиболее часто используемые фреймворки — Vue, React и т. д.
В результате веб-страница, которую мы получаем, имеет только пустую оболочку, например такую:
<!DOCTYPE html>
<html lang="en" style="background-color: #26282A; height: 100%">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title>演示项目</title>
</head>
<style>
html,
body,
#app {
height: 100%
}
</style>
<body>
<noscript>
<strong>We're sorry but xxxxxx doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<script src=/js/chunk-vendors.84ee7bec.js></script>
<script src=/js/app.4170317d.js></script>
</body>
</html>
Источники кода — это небольшие вещи, которые обычно делают блоггеры, и блоггеры опустили много введенного JavaScript.
В узле body есть только один узел с идентификатором приложения, но следует отметить, что файлы JavaScript вводятся в конце узла body, которые отвечают за отрисовку всей веб-страницы.
После того, как браузер откроет страницу, он сначала загрузит содержимое HTML, а затем обнаружит, что загружен файл сценария JavaScript.После получения этих файлов сценария он начнет выполнять код, и файл сценария JavaScript будет изменить HTML всего кода страницы, добавить к нему узлы и завершить отрисовку всей страницы.
Но когда мы используем библиотеку запросов для запроса этой страницы, мы можем получить только текущий HTML-контент, это не поможет нам получить этот файл сценария JavaScript и поможет нам выполнить файл сценария для отображения всего узла HTML DOM, конечно, мы также Вы не можете видеть то, что видите в браузере.
Это также объясняет, почему иногда исходный код, который мы получаем, отличается от того, что мы видим в браузере.
Конечно, не паникуйте в этой ситуации, мы также можем использовать библиотеки, такие как Selenium и Splash, для имитации рендеринга JavaScript в браузере.
Позже мы поговорим об этом содержании медленно.Эта статья в основном помогает учащимся получить базовое представление о поисковых роботах, чтобы облегчить последующее обучение.
Ссылаться на:
https://cuiqingcai.com/5484.html