2017-01-28 9 views
0

これは以前に尋ねられましたが、常に出てくる答えはDjangoItemです。しかし、それはそれで述べgithubのはということです:...これはの核心である(パイプラインの)ScrapyプロジェクトでDjangoのモデルを使用してください

十分に拡張しないことがあり、多くの場合、

ない(例えばウェブクローラなど)の書き込み集中型アプリケーションに適しています私の問題は、私は私がのpython manage.pyシェルを実行したときに私ができるのと同じ方法で使用し、私のDjangoのモデルと対話したいと私はmyapp.modelsからを行うMODEL1をインポートします。クエリを使用してlike seen here.

私は相対的なインポートを試み、私のdjangoアプリ内で、私の役に立たない両方の治療プロジェクト全体を移動している。

このために私の治療計画を動かすべきですか?どのようにして、私が利用できるすべてのメソッドを再作成/使用することができますか?

ありがとうございます。

+0

これを理解できましたか? –

+0

いいえ私はしていません。それは私を夢中にさせている。私は本当に生のSQLを扱うことを避けたいと思います。 Django APIはそれに最適です!私はsqlalchemyを見ているかもしれませんが、もし私も持っていなければ、私はむしろ別のライブラリを習得しません。何か提案がありましたか、あるいは私が調べることができるアプローチがありますか? –

+0

OKこれまでにこれを行っています。すぐに答えを書き留めます。週末です。 –

答えて

3

ここでは、私はdjangoの中でscrapyを使用するサンプルプロジェクトを作成しています。そして、パイプラインの1つでDjangoモデルとORMを使用します。

https://github.com/bipul21/scrapy_django

ディレクトリ構造は、あなたのDjangoプロジェクトを開始します。 この場合、プロジェクト名はdjango_projectです。 は、一度、あなたのscrapyプロジェクトの設定でscrapy_projectここ

つまり、あなたのscrapyプロジェクトを作成し、ベースのプロジェクト内の設定に次の行を追加しますiは、単純なクエリを作ったパイプラインでジャンゴ

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

関連する問題