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

27 篇文章 0 订阅
6 篇文章 0 订阅

项目整体结构:

├── 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就可以了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值