使用MySQL数据库存储
安装mysql模块包
  1. pip install mysqlclient
相关库文件
  1. sudo apt-get install libmysqlclient-devel
  2.  
  3. sudo apt-get install python-devel mysql-devel
阻塞型的数据写入操作
  1. class MysqlPipeline(object):
  2.  
  3. def __init__(self):
  4. self.conn = pymysql.connect('192.168.1.1', 'root', '', 'titlespider',
  5. charset='utf-8', use_unicode=True)
  6. self.cursor = self.conn.cursor()
  7.  
  8. def process_item(self, item, spider):
  9. insert_sql = """
  10. insert into article(title, cteate_time, url, content)
  11. VALUES (%s, %s, %s, %s)
  12. """
  13. self.cursor.execute(insert_sql, (item['title'], item['cteate_time'], item['url'], item['content']))
  14. self.conn.commit()
  15. return item
使用twisted提供的数据库连接池,异步化写入,缓解写数据操作堵塞
  1. # 首先在settings定义数据库关键字变量
  2.  
  3. MYSQL_HOST = '192.168.1.1'
  4. MYSQL_USER = 'root'
  5. MYSQL_PASSWD = ''
  6. MYSQL_DB = 'articlespider'
  7.  
  8. # 然后编写Pipeline类
  9.  
  10. from twisted.enterprise import adbapi
  11. import pymysql
  12. import pymysql.cursors
  13.  
  14. class MysqlTwistedPipeline(object):
  15.  
  16. def __init__(self, dbpool):
  17. self.dbpool = dbpool
  18.  
  19. @classmethod
  20. def from_settings(cls, settings):
  21. conn_dict = dict(
  22. host = settings['MYSQL_HOST'],
  23. user = settings['MYSQL_USER'],
  24. passwd = settings['MYSQL_PASSWD'],
  25. database = settings['MYSQL_DB'],
  26. charset = 'utf-8',
  27. cursorclass = pymysql.cursors.DictCursor,
  28. use_unicode = True
  29. )
  30. dbpool = adbapi.ConnectionPool('PyMySQL', **conn_dict)
  31. return cls(dbpool)
  32.  
  33. def process_item(self, item, spider):
  34. query = self.dbpool.runInteraction(self.do_insert, item)
  35. query.addErrorback(self.handle_error)
  36. return item
  37.  
  38. def do_insert(self, item):
  39. insert_sql = """
  40. insert into article(title, cteate_time, url, content)
  41. VALUES (%s, %s, %s, %s)
  42. """
  43. self.cursor.execute(insert_sql, (item['title'], item['cteate_time'], item['url'], item['content']))
  44. self.conn.commit()
  45.  
  46. def handle_error(self, failure):
  47. print(failure)
使用类似django-model的方式写入数据库
  1. https://github.com/scrapy-plugins/scrapy-djangoitem
 
 

Scrapy学习-7-数据存储至数据库的更多相关文章

  1. Django中从本地上传excel文件并将数据存储到数据库

    Django中从本地上传excel文件并将数据存储到数据库 一.前端界面 <div class="page-container"> <form action=&q ...

  2. Android开发--数据存储之数据库操作

    简介: SQLite 的介绍: SQLite数据库属于文本型的数据库,它是以文本的形式来保存的.Android提供了对 SQLite 数据库的完全支持,应用程序中的任何类都可以通过名称来访问任何的数据 ...

  3. Android开发学习——android数据存储

    Android的存储 Android中的数据存储方式及其存储位置 SharedPrefrence存储 1). 位置           /data/data/packageName/shared_pr ...

  4. Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

    1.Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括:数据库.文件.表.试图 Hive默认可以直接加载文本文件(TextFile),还 ...

  5. iOS应用数据存储2-SQLite3数据库

          SQLite3 SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易使用,内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中. SQLite ...

  6. iOS学习笔记--数据存储

    iOS应用数据存储的常用方式 XML属性列表(plist)归档 Preference(偏好设置) NSKeyedArchiver归档(NSCoding) SQLite3 Core Data 1. XM ...

  7. HTML5深入学习之数据存储

    概述 本来,数据存储都是由 cookie 完成的,但是 cookie 不适合大量数据的存储,cookie 速度慢且效率低. 现在,HMLT5提供了两种在客户端存储数据的办法: localStorage ...

  8. Scrapy爬虫案例 | 数据存储至MySQL

    首先,MySQL创建好数据库和表 然后编写各个模块 item.py import scrapy class JianliItem(scrapy.Item): name = scrapy.Field() ...

  9. Android数据存储——SQLite数据库(模板)

    本篇整合Android使用数据库,要保存一个实体类的样本. 首先看一下数据库语句: ORM:关系对象映射 添加数据: ContentValues values = new ContentValues( ...

随机推荐

  1. 【Codeforces Rockethon 2014】Solutions

    转载请注明出处:http://www.cnblogs.com/Delostik/p/3553114.html 目前已有[A B C D E] 例行吐槽:趴桌子上睡着了 [A. Genetic Engi ...

  2. Bzoj 1257 [CQOI2007]余数之和 (整除分块)

    Bzoj 1257 [CQOI2007]余数之和 (整除分块) 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1257 一道简单题. 题目 ...

  3. Python自动化测试框架——数据驱动(从代码中读取)

    今天小编要介绍的是数据驱动最简单和最常用的一种方法,由于只是介绍方法,代码操作后的美观程度略有缺陷,介意者可以自行改动 还是以163邮箱登录为例: 设计一个存放数据的类,这个类的参数是我们需要修改的数 ...

  4. PHP获取文件后缀的7中方法

    在日常的工作当中我们避免不了要经常获取文件的后缀名,今天我就整理了一下7种获取文件后缀的方法,希望对大家有所帮助. $url = 'http://www.baidu.com/uploads/20185 ...

  5. (56)zabbix Screens视图配置

    screen翻译成中文为“屏幕”,在超市.单位等等地方都比较常见到监控视频,视频上有多块小视频,实际上zabbix screen和这个功能类似.你可以设置多个screen,每个screen可以显示特定 ...

  6. python-格式化输出(考试必考)

    Python与用户交互 如何交互 我们使用input()方法来与用户交互,但是无论我们输入的值是数字类型.字符串类型.列表类型,input的接收值都是字符串类型. name = input('请输入你 ...

  7. Day07 数据类型(列表,元组,字典,集合)常用操作和内置方法

    数据类型 列表list: 用途:记录多个值(同种属性) 定义方式:[]用逗号分隔开多个任意类型的值 list()造出来的是列表,参数是可迭代对像,也就是可以使用for循环的对像 传入字典,出来的列表元 ...

  8. Head First HTML5 Programming笔记--chapter2 介绍Javascript和DOM

    你已经了解了HTML标记(也称为结构),而且知道了CSS样式(也称为表示),剩下的就是Javascript(也称为行为). JavaScript的工作方式 1. 编写 你创建HTML标记和JavaSc ...

  9. Hive中文注释乱码解决方案(2)

    本文来自网易云社区 作者:王潘安 执行阶段 launchTask    回到Driver类的runInternal方法,看以下执行过程.在runInternal方法中,执行过程调用了execute方法 ...

  10. angular controller与directive相互引用

    /** * Created by Administrator on 2017/8/28. */ var app =angular.module('app',[]); app.directive('fo ...