Max*_*ith 1 python django django-models scrapy scrapy-pipeline
之前曾有人问过这个问题,但总会出现的答案是使用DjangoItem。但是它在github上指出:
通常对于写密集型应用程序(例如Web爬网程序)来说不是一个好的选择...可能无法很好地扩展
这是我问题的症结所在,我想以与我运行python manage.py shell以及从myapp.models import Model1进行操作时相同的方式使用Django模型并与之交互。使用查询如此处所示。
我已经尝试了相对导入,并将我的整个scrapy项目移到了django应用程序中,但都无济于事。
我应该将我的拼凑项目移到哪里进行这项工作?我该如何重新创建/使用所有在Scrapy管道内的Shell中可用的方法?
提前致谢。
在这里,我创建了一个示例项目,该项目在Django内部使用了scrapy。并在管道之一中使用Django模型和ORM。
https://github.com/bipul21/scrapy_django
目录结构从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()
Run Code Online (Sandbox Code Playgroud)
在管道中,我对问题模型进行了简单查询
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
Run Code Online (Sandbox Code Playgroud)
您可以在项目中签入任何更多详细信息,例如模型架构。