djangoのviewsで取得したURL(リストで最大50件)をscrapyに渡してスクレイピングするという方法を取っています。
同じプロジェクト内の異なるアプリ同士のデータのやり取りに付いての方法についてお聞きしたいです。
質問1つ目
DBに保存が必要ないデータを(しかしscrapyを動かすのには必要)、同じプロジェクト内の別のフレームワーク間でやり取りする場合どのようにするのがベストなのでしょうか?速度、メモリなど
保存しなくてもいい情報をDBに保存するのは速度的によくないと思っているのですが、
あまり気にしなくてもいいのでしょうか?
質問2つ目
sessionは一時的に使う情報を取り扱う場所との認識がありますが、このような使い方は間違っていたりするのでしょうか?
質問3つ目
io.StriongIO、pickle、shelveなどが(この3つは使用したことがまだありません)
使用できる様な気がするのですが間違ってますでしょうか?
ご教授頂ければ幸いです。よろしくお願いいたします。
この様な構成のプロジェクトがあります。
my_project
|_config
|_apps
|_main_app
| |_models.py
| |_views.py
| |以下省略
| |...
|_scrapy_app
一見隣同士に見えるmin_app(django)とscrapy_app。最初はdjangoの様にデータが受け渡せると勘違いしておりました。
そこでscrapy_appのsettigs.pyに書きの三行をいれてdjangoの設定を使えるようにしました。
myproject/apps/scrapy_app/scrapy_app/settigs.py
import os import sys import django sys.path.append(os.path.dirname(os.path.abspath('../'))) os.environ['DJANGO_SETTINGS_MODULE'] = 'config.settings' django.setup()
これでscrapy内でモデルなどdjangoと同じ様に使えるようになりました。
from apps.main_app.models import SiteData #モデルが使用できるようになった! def start_requests(self): # データベースから取り出した文字列から不必要なものを取り除いてlistにしてscrapyに渡している 中身はhttpsから始まるurlのリスト site_data = SiteData.objects.get(pk=self.unique_id) google_results = site_data.google_results urls = google_results.translate(str.maketrans({"[": None, "]": None, "'": None, ",": None})).split() for url in urls: yield Request(url=url, callback=self.parse)
djangoのviewsでurlを取得 => DB => scrapy という流れです。
最初はsessionにurlを保存してscrapyへという流れで動かしたのですが、sessionの使い方として正しくない様な気がしてDBに保存しました。
しかし、このURLはscrapyを動かすのに使うだけでDBに保存するようなものでもないような気がします。
1.django viewsでURLの取得の処理
2.DBに保存するか、なんらかのモジュールを使ってデータを保持
3.scrapy内でURLを使用
ご回答のほどよろしくお願いいたします。
win10
python3.6.5
django2.0
scrapy1.5
sqlite3

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/23 15:06