目的
主要目的就是使用scrapy进行数据抓取工作,然后使用django 作为网站的来进行显示数据,可以使用django的admin对数据进行直接查看和处理。这里面的难点就是scrapy如何利用django好用的的models来让写入数据库方便一点,其实知道了后就发现并不难😂
直接进入正题
目前我查了很多后发现了两个稳定的方法
- 使用scrapy_djangoItem库
- 直接使用Django 导入models处理3. 或者当然,两者都结合起来
第一,使用scrapy_djangoItem库
这种方法一搜索基本都是,但是我发现也不是太多人使用这种方法,然后我去看一下,这个库已经是2016年最后一次更新
https://github.com/scrapy-plugins/scrapy-djangoitem
感觉多多少少不那么放心,不过第一个找到的方法就是这个,那我就直接先研究这个方法了,于是找到另一个csdn博主的博文,我已经验证这种方法可以配置好DjangoItem,目前依旧可用(博文地址:博文地址)
然后完成了后发现一个问题,一对多,多对多!这个很难处理,然后说说这个DjangoItem 库,其实主要的功能就是scrapy item的模型类不用重写写一堆字段,仅此而已,下一个方法会解释
第二,直接Django导入models处理
就在我卡着第一种方法如何才能在管道中进行一堆多多对多处理的时候,百度了很久 ,djangoItem manytomany 的操作,没有发现任何可用的文章…诶,然后我架起了梯子,查了一下,发现关于这个库的也不是太多,但是!我发现了一个博主的博文,直接进行models导入操作就可以了!
😂自己对django源码不太了解感到头疼,其实django是可以在其他地方使用orm库的,前提就是能够引入进来,而之所以之前会找第一种djangoItem的方法,也是因为我直接引入失败,然后不知道如何引入,第一种方法和第二种方法其中共同点就是在创立好 Django项目和模型后,在scrapy的settings中加入下面的这个代码块,让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()
结语
建议使用第二种方法,配置简单,直接使用,完美DjangoItem无法很好处理多对多,一对多的情况,引入进去后按照在django中使用来使用就可以,一般结合的话Django项目和Scrapy项目文件夹位置应该没有特别的规定,不过我是放平行的位置如下:
Scrapy-django
├───mydjango(django项目)
│ │ manage.py
│ ├───myapp
│ │
│ └───mydjango
└───myscrapy(scrapy项目)
│ scrapy.cfg
│
└───myscrapy
├───spiders
│
│__init__.py
最主要的就是:
记得在Scarpy 的settings.py中加上了引入django项目环境的代码块
记得在Scarpy 的settings.py中加上了引入django项目环境的代码块
记得在Scarpy 的settings.py中加上了引入django项目环境的代码块
重要的事情说三遍,然后scrapy+django结合起来也就非常舒服了,当然你也可以两种方法都结合起来,不冲突的。。。最后是我scrapy+djagno组合的源码