Как лучше всего экспортировать информацию из поискового робота Scrapy в базу данных приложения Django?

Я пытаюсь создать приложение Django, которое работает как магазин. Элементы собираются со всего Интернета и постоянно обновляют базу данных проекта Django (скажем, каждые несколько дней). Я использую среду Scrapy для выполнения парсинга, и хотя есть экспериментальная функция DjangoItem, Я бы предпочел держаться от него подальше, потому что он нестабилен.

Прямо сейчас я планирую создать XML-файлы просканированных элементов с помощью Scrapy XMLItemExporter (docs здесь) и используйте их, чтобы loaddata в проект Django в качестве приспособлений XML (docs здесь). Кажется, это нормально, потому что, если один из двух процессов дает сбой, между ними существует файловый посредник. Модуляризация приложения в целом тоже не кажется плохой идеей.

Некоторые проблемы:

  • Эти файлы могут быть слишком большими для чтения в память для loaddata Django.
  • Я трачу на это слишком много времени, когда может быть лучшее или более простое решение, такое как экспорт напрямую в базу данных, которой в данном случае является MySQL.
  • Похоже, что никто не писал об этом процессе в Интернете, что странно, учитывая, что Scrapy, на мой взгляд, является отличным фреймворком для подключения к приложению Django.
  • Нет точного руководства по созданию фикстур Django вручную в документации Django - похоже, что он больше ориентирован на сброс и перезагрузку фикстур из самого приложения.

Существование экспериментального DjangoItem предполагает, что Scrapy + Django является достаточно популярным выбором, чтобы найти здесь хорошее решение.

Буду очень признателен за любые решения, советы или мудрость по этому поводу.


person emish    schedule 29.07.2011    source источник


Ответы (2)


Этот вопрос уже устарел, но в настоящее время я также занимаюсь правильной интеграцией Django + Scrapy. Мой рабочий процесс следующий: я настроил Scrapy как команду управления Django, как описано в этом ответе. После этого я просто пишу конвейер Scrapy, который сохраняет извлеченный элемент в базу данных Django, используя методы Django QuerySet. Это все. В настоящее время я использую SQLite для базы данных, и он отлично работает. Может, это еще кому-то поможет.

person pemistahl    schedule 17.08.2012

Вы можете использовать django-dynamic-scraper для создания и управления скребками Scrapy с легким доступом к моделям Django. До сих пор я не сталкивался с проблемами, которые он не может решить, и которые не может решить Scrapy.

документация Django-dynamic-scraper

person Sectio Aurea    schedule 22.01.2013