Ответ 1
Есть несколько возможных проблем, которые я вижу сразу.
Прежде чем начать, я хотел бы упомянуть, что prefs() не показывает количество запросов в очереди, оно показывает количество объектов Request(), которые являются живыми. Он может ссылаться на объект запроса и поддерживать его, даже если он больше не загружается в очередь.
Я действительно ничего не вижу в коде, который вы предоставили, который мог бы вызвать это, но вы должны помнить об этом.
С самого начала, я бы спросил: вы используете куки? Если нет, сайты, которые передают идентификатор сеанса в виде переменной GET, будут генерировать новый идентификатор сеанса для каждого посещения страницы. Вы по существу продолжаете поочередно повторять одни и те же страницы. Например, у victorinox.com будет что-то вроде "jsessionid = 18537CBA2F198E3C1A5C9EE17B6C63AD" в строке URL-адреса, с изменением идентификатора для каждой новой загрузки страницы.
Во-вторых, вы можете поразить пауков-пауков. То есть, страница, которая просто перезагружается, с новым бесконечным количеством ссылок. Подумайте о календаре со ссылкой на "следующий месяц" и "предыдущий месяц". Тем не менее, я не вижу ничего на сайте victorinox.com.
В-третьих, из предоставленного кода ваш Паук не ограничен каким-либо конкретным доменом. Он будет извлекать каждую найденную ссылку на каждой странице, используя parse_obj
для каждого из них. На главной странице сайта victorinox.com есть ссылка на http://www.youtube.com/victorinoxswissarmy. Это, в свою очередь, заполнит ваши запросы тоннами ссылок на YouTube.
Вам нужно устранить неполадки, чтобы узнать, что именно происходит.
Некоторые стратегии, которые вы можете использовать:
- Создайте новое Middleware Downloader и зарегистрируйте все ваши запросы (в файл или базу данных). Просмотрите запросы на нечетное поведение.
- Ограничьте глубину, чтобы не допустить бесконечного продолжения отверстия кролика.
- Ограничьте домен, чтобы проверить, все ли проблема.
Если вы обнаружите, что у вас есть законные права на многие запросы, а память - проблема, включите постоянную очередь заданий и сохраните запросы на диск. Я бы рекомендовал против этого как первый шаг, хотя, скорее всего, ваш искатель не работает так, как вы этого хотели.