2017-01-28 7 views
0

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

часто не является хорошим выбором для записи ресурсоемких приложений (например, веб-гусеничном) ... не очень хорошо масштабируется

Это суть моего проблема, я хотел бы использовать и взаимодействовать с моей Джанго модели в том же случае я могу, когда я бегу питон manage.py оболочки и я из myapp.models импорта Model1. Использование запросов like seen here.

Я пробовал относительный импорт и перемещал весь проект по очистке внутри своего приложения django, причем безрезультатно.

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

Заранее спасибо.

+0

Вы могли понять это? –

+0

Нет, нет. Это сводит меня с ума. Мне бы очень хотелось избежать работы с сырым SQL. Django api отлично подходит для этого! Я мог бы заглянуть в sqlalchemy, но я бы предпочел не изучать другую библиотеку, если у меня ее тоже нет. Есть ли у вас какие-либо предложения или, возможно, подход, который я мог бы изучить? –

+0

OK Я сделал это раньше. Скоро напишет ответ. Это выходные. –

ответ

3

Здесь я создал образец проекта, который использует scrapy внутри django. И использует модели Django и ORM в одном из конвейеров.

https://github.com/bipul21/scrapy_django

Структура каталогов начинается с Джанго проекта. В этом случае имя проекта django_project. Оказавшись внутри базового проекта вы создаете свой проект Scrapy т.е. scrapy_project здесь

В настройках проекта Scrapy добавить следующую строку для настройки инициализации Django

import os 
import sys 
import django 

sys.path.append(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "..")) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings' 

django.setup() 

В трубопроводе я сделал простой запрос к Вопрос Модель

from questions.models import Questions 

class ScrapyProjectPipeline(object): 
    def process_item(self, item, spider): 
     try: 
      question = Questions.objects.get(identifier=item["identifier"]) 
      print "Question already exist" 
      return item 
     except Questions.DoesNotExist: 
      pass 

     question = Questions() 
     question.identifier = item["identifier"] 
     question.title = item["title"] 
     question.url = item["url"] 
     question.save() 
     return item 

Вы можете проверить проект для получения более подробной информации, такой как схема модели.

+0

Это именно то, что я искал! Спасибо большое. Я не могу поверить, что я не мог найти это в Интернете. –

+0

Итак, если это работает, в чем смысл плагина Scrapy-DjangoItem? Это кажется лучше, так как мне нужно будет также делать запросы к db, чтобы правильно обновлять/сохранять скребковые элементы – Tjorriemorrie

 Смежные вопросы

  • Нет связанных вопросов^_^