Каков наилучший подход к утилизации большого сайта? - PullRequest
0 голосов
/ 08 июля 2019

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

Набор для хранения посещенных сайтов и набор для посещения не посещенных сайтов.

Для лома на сайте я использую темы с лимитом 2000 тем.

Эта архитектура имеет проблему с размером памяти и никогда не может завершиться, потому что программа заполняет память URL-адресами

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

Для этого я использую python, я думаю, что, возможно, лучший подход - хранить все сайты в базе данных, но я думаю, что это может быть медленным

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

Есть идеи о том, как это улучшить, с помощью другого инструмента, языковой архитектуры и т. Д ...?

Спасибо

1 Ответ

1 голос
/ 09 июля 2019

Сначала я никогда не сканировал страницы, используя 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 должно быть что-то доступное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...