首先确认已经安装好Django和scrapy
创建一个Django项目和Django应用
django-admin startproject django_scrapy_test
python manage.py startapp novel_test
进入setting进行应用的注册和数据库配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'novel_test',#注册应用
]
#数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'novel_test',
'USER':'root',
'PASSWORD':'123456',
'HOST':'localhost',
'PORT':3306
}
}
然后创建scrapy
scrapy startproject scrapy_novel
cd scrapy_novel
scrapy genspider novel_spider www.xxx.com
创建好的目录如下
进入novel_test下面的models.py,设计模型:
from django.db import models
# Create your models here.
class Novel(models.Model):
novel_name = models.CharField(max_length=100,verbose_name='小说名称')
author = models.CharField(max_length=50,verbose_name='作者')
class Meta():
db_table = 'novel'
verbose_name = '小说'
verbose_name_plural = verbose_name
def __str__(self):
return self.novel_name
进行迁移
python manage.py makemigrations
python manage.py migrate
迁移完成,查看数据库是否有了相应的表
mysql> show tables;
+----------------------------+
| Tables_in_novel_test |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| novel |
+----------------------------+
11 rows in set (0.00 sec)
然后对scrapy的设置文件进行,在设置文件中加上以下内容(关于爬虫的一些设置如机器人协议,输出日志等这里就不详细说了)
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath('.')))
os.environ['DJANGO_SETTINGS_MODULE'] = 'django_scrapy_test.settings' # 项目名.settings
import django
django.setup()
编写爬虫文件,这时可以将Django的模型类导入了
import scrapy
from novel_test.models import Novel #从Django导入的模型类
class NovelSpiderSpider(scrapy.Spider):
name = 'novel_spider'
#allowed_domains = ['www.xxx.com']
start_urls = ['https://www.xbiquge.la/xuanhuanxiaoshuo/']
def parse(self, response):
li_list = response.xpath('//div[@class="r"]/ul/li')
for li in li_list:
novel_name = li.xpath('./span[1]/a/text()').extract_first()
author = li.xpath('./span[2]/text()').extract_first()
#使用模型类存入数据库
Novel.objects.create(novel_name=novel_name,author=author)
然后执行爬虫
scrapy crawl novel_spider
爬虫执行后,查看数据库
mysql> select * from novel;
+----+--------------------------------------+--------------------+
| id | novel_name | author |
+----+--------------------------------------+--------------------+
| 1 | 伏天氏 | 净无痕 |
| 2 | 牧神记 | 宅猪 |
| 3 | 武炼巅峰 | 莫默 |
| 4 | 沧元图 | 我吃西红柿 |
| 5 | 圣墟 | 辰东 |
| 6 | 全职法师 | 乱 |
| 7 | 叶辰孙怡夏若雪 | 全文免费阅读 |
| 8 | 终极斗罗 | 唐家三少 |
| 9 | 元尊 | 天蚕土豆 |
| 10 | 仙武帝尊 | 六界三道 |
| 11 | 帝霸 | 厌笔萧生 |
| 12 | 万古神帝飞天鱼 | 飞天鱼 |
| 13 | 都市极品医神 | 风会笑 |
| 14 | 左道倾天 | 风凌天下 |
| 15 | 斗罗大陆 | 唐家三少 |
| 16 | 临渊行 | 宅猪 |
| 17 | 人皇纪 | 皇甫奇 |
| 18 | 大主宰 | 天蚕土豆 |
| 19 | 武动乾坤 | 天蚕土豆 |
| 20 | 上古强身术 | 我是多余人 |
| 21 | 剑来 | 烽火戏诸侯 |
| 22 | 飞剑问道 | 我吃西红柿 |
| 23 | 一剑独尊 | 青鸾峰上 |
| 24 | 混沌剑神 | 心星逍遥 |
| 25 | 斗破苍穹 | 天蚕土豆 |
| 26 | 盖世 | 逆苍天 |
| 27 | 叶尘池瑶小说全文免费阅读 | 叶尘池瑶 |
| 28 | 完美世界 | 辰东 |
| 29 | 无敌剑域 | 青鸾峰上 |
| 30 | 永恒圣帝 | 千寻月 |
+----+--------------------------------------+--------------------+
30 rows in set (0.00 sec)
成功存入了数据