本篇文章小编给大家分享一下Django结合使用Scrapy爬取数据入库代码方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
在django项目根目录位置创建scrapy项目,django_12是django项目,ABCkg是scrapy爬虫项目,app1是django的子应用
2.在Scrapy的settings.py中加入以下代码
import os import sys sys.path.append(os.path.dirname(os.path.abspath('.'))) os.environ['DJANGO_SETTINGS_MODULE'] = 'django_12.settings' # 项目名.settings import django django.setup()
3.编写爬虫,下面代码以ABCkg为例,abckg.py
# -*- coding: utf-8 -*- import scrapy from ABCkg.items import AbckgItem class AbckgSpider(scrapy.Spider): name = 'abckg' #爬虫名称 allowed_domains = ['www.abckg.com'] # 允许爬取的范围 start_urls = ['http://www.abckg.com/'] # 第一次请求的地址 def parse(self, response): print('返回内容:{}'.format(response)) """ 解析函数 :param response: 响应内容 :return: """ listtile = response.xpath('//*[@id="container"]/div/div/h2/a/text()').extract() listurl = response.xpath('//*[@id="container"]/div/div/h2/a/@href').extract() for index in range(len(listtile)): item = AbckgItem() item['title'] = listtile[index] item['url'] = listurl[index] yield scrapy.Request(url=listurl[index],callback=self.parse_content,method='GET',dont_filter=True,meta={'item':item}) # 获取下一页 nextpage = response.xpath('//*[@id="container"]/div[1]/div[10]/a[last()]/@href').extract_first() print('即将请求:{}'.format(nextpage)) yield scrapy.Request(url=nextpage,callback=self.parse,method='GET',dont_filter=True) # 获取详情页 def parse_content(self,response): item = response.meta['item'] item['content'] = response.xpath('//*[@id="post-1192"]/dd/p').extract() print('内容为:{}'.format(item)) yield item
4.scrapy中item.py 中引入django模型类
pip install scrapy-djangoitem
from app1 import models from scrapy_djangoitem import DjangoItem class AbckgItem(DjangoItem): # define the fields for your item here like: # name = scrapy.Field() # 普通scrapy爬虫写法 # title = scrapy.Field() # url = scrapy.Field() # content = scrapy.Field() django_model = models.ABCkg # 注入django项目的固定写法,必须起名为django_model =django中models.ABCkg表
5.pipelines.py中调用save()
import json from pymongo import MongoClient # 用于接收parse函数发过来的item class AbckgPipeline(object): # i = 0 def open_spider(self,spider): # print('打开文件') if spider.name == 'abckg': self.f = open('abckg.json',mode='w') def process_item(self, item, spider): # # print('ABC管道接收:{}'.format(item)) # if spider.name == 'abckg': # self.f.write(json.dumps(dict(item),ensure_ascii=False)) # # elif spider.name == 'cctv': # # img = requests.get(item['img']) # # if img != '': # # with open('图片%d.png'%self.i,mode='wb')as f: # # f.write(img.content) # # self.i += 1 item.save() return item # 将item传给下一个管道执行 def close_spider(self,spider): # print('关闭文件') self.f.close()
6.在django中models.py中一个模型类,字段对应爬取到的数据,选择适当的类型与长度
class ABCkg(models.Model): title = models.CharField(max_length=30,verbose_name='标题') url = models.CharField(max_length=100,verbose_name='网址') content = models.CharField(max_length=200,verbose_name='内容') class Meta: verbose_name_plural = '爬虫ABCkg' def __str__(self): return self.title
7.通过命令启动爬虫:scrapy crawl 爬虫名称
8.django进入admin后台即可看到爬取到的数据。
太极熊猫2百度版 安卓版v1.7.1
下载黎明觉醒应用宝版 安卓版v1.111.1
下载暗影格斗3国际版 (Shadow Fight 3)最新版v1.40.3
下载王者战魂华为版 安卓版v3.6.1
下载放置魔法学院免广告版 v2.9.5
放置魔法学院内置Mod菜单是游戏的破解版本,在该版本中为玩家
万乘之国qq版本 安卓版v1.0.5
万乘之国qq版本是一款极具魅力的策略游戏,玩家们可以通过不同
动物餐厅国际服无限内购版 v12.9
动物餐厅国际服免广告版是游戏的破解版本,在该版本中为玩家去除
欧洲卡车司机 安卓版v3.2
欧洲卡车司机是款模拟经营游戏,这款游戏的画面还是蛮逼真的,给
疯狂大酒店 (Grand Hotel Mania)最新中文版v4.10.0.20
疯狂大酒店(Grand Hotel Mania)是一款好玩的