Сначала я никогда не сканировал страницы, используя Python.Мой любимый язык - с #.Но python должен быть хорошим или лучше.
Хорошо, первое, что вы обнаружили, очень важно.Просто работа на вашей памяти не будет работать.Реализация способа работы на жестком диске очень важна.Если вы просто хотите работать с памятью, подумайте о размере страницы.
По моему мнению, вы уже получили лучшую (или хорошую) архитектуру для веб-сканирования / сканирования.Вам нужен какой-то список, который представляет URL-адреса, которые вы уже посетили, и другой список, в котором вы можете сохранить новые URL-адреса, которые вы нашли.Всего два списка - это самый простой способ, которым вы могли бы воспользоваться.Это означает, что вы не реализуете какую-то стратегию сканирования.Если вы не ищете что-то подобное, хорошо.Но подумайте об этом, потому что это может оптимизировать использование памяти.Для этого вы должны искать что-то вроде глубокого и широкого сканирования.Или рекурсивное сканирование.Представление каждой ветви в виде собственного списка или измерения массива.
Кроме того, в чем проблема с сохранением ваших не посещенных URL-адресов в базе данных?Потому что вам нужно только на каждом потоке.Если ваша проблема с размещением в db заключается в том, что может потребоваться некоторое время на его перелистывание, вам следует подумать об использовании нескольких таблиц для каждой части страницы.
Это означает, что вы можете использовать одну из них.таблица для каждой подстроки в URL:
wwww.example.com /
wwww.example.com / contact /
wwww.example.com / download /
wwww.example.com / content /
wwww.example.com / support /
wwww.example.com / news /
Так что, если ваш URL-адрес: "wwww.example.com/download/sweetcats/", то вы должны поместить его в таблицу для wwww.example.com/download/.Когда у вас есть набор URL-адресов, вы должны сначала искать правильную таблицу.После этого вы можете провести по столу.
И в конце у меня только один вопрос.Почему вы не используете библиотеку или фреймворк, который уже поддерживает эти функции?Я думаю, что для Python должно быть что-то доступное.