Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как увеличить скорость загрузки в scrapy?

Автор вопроса: AbeОтветов: 1

Я использую scrapy для параллельной загрузки страниц из разных доменов. Мне нужно загрузить сотни тысяч страниц, поэтому важна производительность.

К сожалению, когда я профилировал скорость скрапинга, я получаю только пару страниц в секунду. Действительно, около 2 страниц в секунду в среднем. Ранее я писал свои собственные многопоточные пауки, которые выполняли сотни страниц в секунду - я был уверен, что использование scrapy для скрученных и т. д. будет способно на подобную магию.

Как ускорить скрапинг? Мне очень нравится фреймворк, но эта проблема с производительностью может стать для меня препятствием.

Вот соответствующая часть файла settings.py. Есть ли какая-то важная настройка, которую я пропустил?

LOG_ENABLED = False
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_IP = 8

Несколько параметров:

  • Использование скрап версии 0.14
  • Проект развернут на большом инстансе EC2, поэтому должно быть достаточно памяти, ЦП и пропускной способности для работы.
  • Я планирую обходы с использованием протокола JSON, поддерживая поисковый робот несколькими десятками одновременных обходов в любой момент времени.
  • Как я сказал в начале, я загружаю страницы со многих сайтов, поэтому производительность удаленного сервера и CONCURRENT_REQUESTS_PER_IP не должны вызывать беспокойства.
  • На данный момент я очень мало занимаюсь постобработкой. Нет xpath; нет регулярного выражения; Я просто сохраняю URL-адрес и несколько основных статистических данных для каждой страницы. (Это изменится позже, когда я разберусь с основными проблемами производительности.)
  • Scrapy работает намного быстрее. Это связано с процессором или кажется, что оно простаивает? это медленно с самого начала или производительность ухудшается? Shane Evans 14.09.2012
  • Это медленно с самого начала. AWS показывает, что машина работает на 100% CPU, но я думаю, что скрученный реактор всегда так делает. Машина по-прежнему быстро реагирует на команды SSH, новые HTTP-запросы и т. д. Abe 14.09.2012
  • Работая над этим в течение последнего часа, я подозреваю, что проблема в файлах конфигурации службы для scrapyd. Я задал отдельный вопрос о перезапуске демона scrapy: stackoverflow.com/questions/12428143/ Abe 14.09.2012
  • Хм, может быть, html слишком сложен для разбора скрап-экстрактором. Попробуйте вместо этого использовать lxml. Kien Truong 14.09.2012
  • @Dikei Я почти уверен, что в scrapy уже используется lxml. В любом случае, как я уже сказал в последнем пункте вопроса, я на самом деле не анализирую HTML. Abe 14.09.2012
  • scrapy использует lxml (или libxml2 в зависимости от версии), переписывание для использования lxml не поможет... но вы можете быть правы насчет сложного синтаксического анализа, xpath или чего-то еще. Профилирование действительно единственный способ сказать. Twisted не всегда потребляет 100% ресурсов процессора - если scrapy ползает медленно/вежливо, он обычно почти простаивает. Shane Evans 14.09.2012

pythonscrapy

Ответы

Ответ 1 · рейтинг 9 · Carlos Henrique Cano

У меня была эта проблема в прошлом ... И большую часть ее я решил с помощью "грязного" старого трюка.

Выполнить локальный кеш DNS.

В основном, когда у вас такая высокая загрузка ЦП при одновременном доступе к удаленным сайтам, это связано с тем, что scrapy пытается разрешить URL-адреса.

И, пожалуйста, не забудьте изменить настройки DNS на хосте (/etc/resolv.conf) на ЛОКАЛЬНЫЙ кеширующий DNS-сервер.

Первые будут медленными, но как только они начнут кэшироваться и разрешаться более эффективно, вы увидите ОГРОМНЫЕ улучшения.

Надеюсь, это поможет вам в вашей проблеме!

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы