Scrapy-django将爬好的数据直接存入django模型中

项目整体结构:

├── django+scrapy
│   ├── example_bot
│   │   ├── __init__.py
│   │   ├── items.py
│   │   ├── pipelines.py
│   │   ├── settings.py
│   │   └── spiders
│   │       ├── __init__.py
│   │       └── example.py 
│   └── scrapy.cfg
└── example_project
    ├── manage.py
    ├── myapp
    │   ├── __init__.py
    │   ├── models.py
    │   ├── admin.py
    │   └── views.py
    └── example_project
        ├── __init__.py
        ├── settings.py
        └── urls.py

Django部分

建立django项目

django-admin.py startproject example_project
python manage.py startapp myapp

假设django的模型为:

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=255)
    age = models.IntegerField()

在admin.py中注册模型

admin.site.register(ExampleDotCom)

更新 INSTALLED_APPS

启动

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

这样Django部分就做好了

Scrapy部分

创建项目

scrapy startproject example_bot

配置settings.py

import os
import sys

from django.core.wsgi import get_wsgi_application

DJANGO_PROJECT_PATH = 'YOUR/PATH/TO/DJANGO/PROJECT'
DJANGO_SETTINGS_MODULE = 'example_project.settings'

sys.path.insert(0, DJANGO_PROJECT_PATH)
os.environ['DJANGO_SETTINGS_MODULE'] = DJANGO_SETTINGS_MODULE
application = get_wsgi_application()

设置好环境路径后,就可以在scrapy项目的代码中导入Django模型了

from myapp.models import Person

安装scrapy-djangoitem

pip install scrapy-djangoitem

创建DjangoItem

在example_bot中的item.py:

from scrapy_djangoitem import DjangoItem

class PersonItem(DjangoItem):
    django_model = Person

之后就可以像使用scrapyItem一样使用DjangoItem了

p = PersonItem()
p['name'] = 'John'
p['age'] = '22'

如果要通过item得到Django的模型,只需调用save()方法

这对于使用外键的模型会有用

>>> person = p.save()
>>> person.name
'John'
>>> person.age
'22'
>>> person.id
1

在调用save()后,模型会存入到数据库,如果不想只想得到模型而不想存入数据库,可以使用commit=False属性

>>> person = p.save(commit=False)
>>> person.name
'John'
>>> person.age
'22'
>>> person.id
None

之后在scrapy项目的根目录下运行scrapy crawl example_bot就可以了

你可能感兴趣的:(python,django,爬虫)