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

Типичная иерархия веб-сайтов

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

Красным цветом показаны страницы, содержащие ссылки, по которым вы не хотите переходить (Facebook, Linkedin, другие страницы социальных сетей). Зеленым цветом обозначены места, из которых вы хотите извлечь ценную информацию. Обратите внимание, что эти две страницы продуктов связаны между собой, поэтому нам следует подумать о том, чтобы не сохранять одну и ту же ссылку несколько раз, когда мы идем сверху вниз по иерархии во время сканирования веб-сайта.

1. Импортируйте необходимые модули

import requests
from bs4 import BeautifulSoup
from tqdm import tqdm
import json

2. Напишите функцию для получения текстовых данных с адреса веб-сайта.

3. Напишите функцию для получения всех ссылок с одной страницы и сохраните их в списке.

Во-первых, в этой функции мы получим все ссылки с пометкой «href». Как уже упоминалось, это потенциально может привести к очистке других веб-сайтов, с которых вы не хотите получать информацию. Мы должны наложить некоторые ограничения на функцию.

Во-вторых, мы также хотим, чтобы href отображал не полную HTML-ссылку, а только относительную ссылку и начинался с «/», чтобы быть включенным в коллекцию ссылок. Например, мы можем встретить ценную HTML-строку, помеченную как href, например:

<a class="pat-inject follow icon-medicine-group" data-pat-inject="hooks: raptor; history: record" href="/bladeren/groepsteksten/alfabet">

Если мы будем использовать строку «/ bladeren / groepsteksten / alfabet» для поиска новых подстраниц, мы получим ошибку.

В-третьих, мы хотим преобразовать ссылку в словарь с помощью функции dict.fromkeys (), чтобы предотвратить сохранение дублирования одной и той же ссылки и ускорить процесс поиска ссылки. Результат выглядит так:

4. Напишите функцию, которая перебирает все подстраницы.

Мы используем цикл for для просмотра подстраниц и tqdm, чтобы получить представление о количестве выполненных шагов и отслеживать оставшееся время для завершения процесса.

5. Создайте петлю.

Прежде чем мы начнем цикл, мы должны инициализировать некоторые переменные. Мы сохраняем веб-сайт, который хотим очистить, в переменной и конвертируем эту переменную в словарь с одним ключом, который имеет значение «Не проверено». Мы создаем счетчик «counter» для подсчета количества «непроверенных» ссылок и мы создаем второй счетчик «counter2» для подсчета количества итераций. Чтобы связаться с собой, мы создаем несколько операторов печати.

Это даст вам что-то вроде следующего:

Как видите, количество непроверенных ссылок уменьшается, пока не станет равным нулю, а затем скрипт будет завершен, а это именно то, что мы хотим.

Файл JSON выглядит примерно так:

Вы можете найти полный код на моей странице GitHub.

Больше контента на plainenglish.io