Я использую 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-адрес и несколько основных статистических данных для каждой страницы. (Это изменится позже, когда я разберусь с основными проблемами производительности.)
lxml. - person Kien Truong   schedule 14.09.2012lxml, если он установлен, но у него есть собственный встроенный парсер только для python. Впрочем, это не имеет значения, поскольку вы им не пользуетесь. Но 100% ЦП, безусловно, очень странно, я никогда раньше не достигал 100% ЦП с помощью scrapy, обычно моя пропускная способность сначала достигает своего предела. - person Kien Truong   schedule 14.09.2012