将scrapy爬取数据通过django入到SQLite数据库
1. 在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后台即可看到爬取到的数据。
将scrapy爬取数据通过django入到SQLite数据库的更多相关文章
- 如何提升scrapy爬取数据的效率
在配置文件中修改相关参数: 增加并发 默认的scrapy开启的并发线程为32个,可以适当的进行增加,再配置文件中修改CONCURRENT_REQUESTS = 100值为100,并发设置成了为100. ...
- scrapy爬取数据的基本流程及url地址拼接
说明:初学者,整理后方便能及时完善,冗余之处请多提建议,感谢! 了解内容: Scrapy :抓取数据的爬虫框架 异步与非阻塞的区别 异步:指的是整个过程,中间如果是非阻塞的,那就是异步 ...
- python之scrapy爬取数据保存到mysql数据库
1.创建工程 scrapy startproject tencent 2.创建项目 scrapy genspider mahuateng 3.既然保存到数据库,自然要安装pymsql pip inst ...
- 42.scrapy爬取数据入库mongodb
scrapy爬虫采集数据存入mongodb采集效果如图: 1.首先开启服务切换到mongodb的bin目录下 命令:mongod --dbpath e:\data\db 另开黑窗口 命令:mongo. ...
- scrapy爬取数据进行数据库存储和本地存储
今天记录下scrapy将数据存储到本地和数据库中,不是不会写,因为小编每次都写觉得都一样,所以记录下,以后直接用就可以了-^o^- 1.本地存储 设置pipel ines.py class Ak17P ...
- scrapy爬取数据保存csv、mysql、mongodb、json
目录 前言 Items Pipelines 前言 用Scrapy进行数据的保存进行一个常用的方法进行解析 Items item 是我们保存数据的容器,其类似于 python 中的字典.使用 item ...
- 信息技术手册可视化进度报告 基于BeautifulSoup框架的python3爬取数据并连接保存到MySQL数据库
老师给我们提供了一个word文档,里面是一份信息行业热词解释手册,要求我们把里面的文字存进数据库里面,然后在前台展示出来. 首先面临的问题是怎么把数据导进MySQL数据库,大家都有自己的方法,我采用了 ...
- Python使用Scrapy框架爬取数据存入CSV文件(Python爬虫实战4)
1. Scrapy框架 Scrapy是python下实现爬虫功能的框架,能够将数据解析.数据处理.数据存储合为一体功能的爬虫框架. 2. Scrapy安装 1. 安装依赖包 yum install g ...
- 爬虫必知必会(6)_提升scrapy框架爬取数据的效率之配置篇
如何提升scrapy爬取数据的效率:只需要将如下五个步骤配置在配置文件中即可 增加并发:默认scrapy开启的并发线程为32个,可以适当进行增加.在settings配置文件中修改CONCURRENT_ ...
随机推荐
- NuGet修改默认包保存的位置
NuGet默认的全局包下载地址一般为:C:\Users\{username}\.nuget\packages 修改方法: <?xml version="1.0" encodi ...
- Linux tree
tree命令,是大小写敏感的.常用的是:1.tree -C 颜色显示 2.tree -f 显示文件全路径ls -R也可以显示树结构,但没上面 清晰 3.tree -L n n 是数字,表示显示几层 4 ...
- JS表单内容垂直循环滚动
参考博客:https://blog.csdn.net/yubo_725/article/details/52839493 大佬是真的厉害,保存一下,以方便后续使用 效果: 源码: <!DOCT ...
- C语言中,关于相除的问题
若定义的类型是 整数型:int a,b ;则a/b的值为整数的,不会带着小数点的..... 若定义的数据类型是 浮点型的 :double a,b; 则这种情况下,得到的结果与数学结果无异
- Node.js module export async function
一.Demo 1.首先定义 module 文件:bbb.js const fs = require("fs"); function readFileSync() { let res ...
- mybatis无效比较:invalid comparison:java.util.data and java.lang.string
原因: 时间与空字符串比较是无效的,如果拿传入的时间类型参数与空字符串''进行对比则会引发invalid comparison:java.util.data and java.lang.string异 ...
- ASP.NET Core Web 应用程序系列(四)- ASP.NET Core 异步编程之async await
PS:异步编程的本质就是新开任务线程来处理. 约定:异步的方法名均以Async结尾. 实际上呢,异步编程就是通过Task.Run()来实现的. 了解线程的人都知道,新开一个线程来处理事务这个很常见,但 ...
- Java - 变量常量数据类型
标识符命名规范 可以有字母数字下划线和美元符组成, hello abc 不能以数字开头 123abc 严格区分大小写 void Void 不能是java的关键字和保留字 class 标识符必须是见名知 ...
- Pandas:DataFrame数据选择方法(索引)
#首先创建我们的Series对象,然后合并到dataframe对象里面去 import pandas as pd import numpy as np area=pd.Series({,,,}) po ...
- 从0系统学Android-2.6Activity间数据传递
本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 2.3.4 向下一个 Activity 传递数据 前面学习了使用 Intent 来启动一个 Activity ,其 ...