传统的使用scrapy爬下来的数据存入mysql,用的是在pipeline里用pymysql存入数据库,

这种方法需要写sql语句,如果item字段数量非常多的 情况下,编写起来会造成很大的麻烦.

我使用的python 库:sqlalchemy来编写,用orm的方式,使代码变得非常简洁,按照数据库

表的字段,编写好自己的类,在settings里面设置好pipeline即可.

# -*- coding: utf-8 -*-

# author:lihansen

from sqlalchemy import create_engine,Column,Integer,String,Table,MetaData
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker class ArticleTemplate():
id = Column(Integer, primary_key=True)#主键自增
sourceName = Column(String(100))
sourceUrl = Column( String(100))
articleUrl = Column( String(100))
articleCategory = Column( String(100))
articleFromName = Column( String(100))
articleFromUrl = Column( String(100))
articleLabel = Column( String(100))
title = Column( String(200))
author = Column( String(100))
publishTime = Column( String(100))
articleContent = Column( String(10000))
imageUrlList = Column( String(300))
imageTitleList = Column( String(100)) def __init__(self, **items):
for key in items:
if hasattr(self,key):
setattr(self,key,items[key]) class ArticleSpidersPipeline(object): def __init__(self):#执行爬虫时
self.engine = create_engine('mysql://root:0@localhost:3306/spider?charset=utf8',echo=True)#连接数据库
self.session=sessionmaker(bind=self.engine)
self.sess=self.session()
Base = declarative_base()
#动态创建orm类,必须继承Base, 这个表名是固定的,如果需要为每个爬虫创建一个表,请使用process_item中的
self.Article = type('article_articletest',(Base,ArticleTemplate),{'__tablename__':'article_article'}) def process_item(self,item,spider):#爬取过程中执行的函数
#按照爬虫名动态创建一个类
# if not hasattr(self,spider.name):
# self.Article = type(spider.name, (Base, ArticleTemplate), {'__tablename__': spider.name, })
#在数据库中创建这个表
# if spider.name not in self.engine.table_names(): #create table for this spider
# self.Article.metadata.create_all(self.engine) self.sess.add(self.Article(**item))
self.sess.commit() def close_spider(self, spider):#关闭爬虫时
self.sess.close()

  

使用sqlalchemy用orm方式写pipeline将scrapy item快速存入 MySQL的更多相关文章

  1. sqlalchemy 的 ORM 方式使用示例

    知乎: 使用 sqlalchemy 的 orm 方式操作数据库是一种怎样的体验? 答: 酸爽! 本文基于:win10 + python3.4 + sqlAlchemy 1.0.13 先看一个图(来源) ...

  2. SQLAlchemy(1) -- Python的SQLAlchemy和ORM

    Python的SQLAlchemy和ORM(object-relational mapping:对象关系映射) web编程中有一项常规任务就是创建一个有效的后台数据库.以前,程序员是通过写sql语句, ...

  3. sqlalchemy 的 ORM 与 Core 混合方式使用示例

    知乎: sqlalchemy 的 ORM 与 Core 混合方式操作数据库是一种怎样的体验? 答: 酸! 本文基于:win 10 + python 3.4 + sqlalchemy 1.0.13 基本 ...

  4. SQLAlchemy的ORM

    表关系: 表之间的关系存在三种:一对一.一对多.多对多.而SQLAlchemy中的ORM也可以模拟这三种关系.因为一对一其实在SQLAlchemy中底层是通过一对多的方式模拟的,所以先来看下一对多的关 ...

  5. xorm:golang的orm(只写了一小部分)

    xorm xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便.这个库是国人开发的,是基于原版 xorm:https://github.com/go-xorm/xorm 的定制 ...

  6. sqlalchemy 的 Core 方式使用示例

    知乎: sqlalchemy 的 Core 方式操作数据是一种怎样的体验? 答: 爽! 本文基于:win 10 + python 3.4 + sqlalchemy 1.0.13 基本步骤如下: 1. ...

  7. jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

    地狱的镰刀 bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){ ...

  8. JavaScript--------------------jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

    bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){alert( ...

  9. Django类方式写view

    问题: Django官方教程中都是通过def函数方式来写view,如何通过类方式写view以及为何要通过类方式写view? 那,如何解决这个问题? 用户访问浏览器,一般两种方式,get获取网页和pos ...

随机推荐

  1. SpringBoot java.lang.IllegalArgumentException: Request header is too large

    在application.properties##tomcat 请求设置server.max-http-header-size=1048576server.tomcat.max-connections ...

  2. TextCNN

    一.什么是TextCNN? 将卷积神经网络CNN应用到文本分类任务,利用多个不同size的kernel来提取句子中的关键信息(类似于多窗口大小的ngram),从而能够更好地捕捉局部相关性. 二.Tex ...

  3. Xgboost调参总结

    一.参数速查 参数分为三类: 通用参数:宏观函数控制. Booster参数:控制每一步的booster(tree/regression). 学习目标参数:控制训练目标的表现. 二.回归 from xg ...

  4. Go linux 实践4

    这是目前学习的最难的Go demo例子 ***************************************** 如果能看懂,你就出师了,我的任务也就结束了 **************** ...

  5. 胸片和CT断层图像是怎么来的?

    本文作者系医科大学青年教师,关注公众号"计算机视觉life"菜单栏回复"医学" 进群交流 如何得到CT断层图像? 相信小伙伴体检的时候都拍过胸片,假如哪个不幸的 ...

  6. 使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句 (原)

    前提MySQL开启了binlog日志操作1. 查看MySQL是否开启binlog(进mysql操作) mysql> show variables like 'log_bin%';       2 ...

  7. MySQL.配置MariaDB的字符集

    配置MariaDB的字符集 环境: 操作系统:CentOS Linux release 7.x mariadb安装及配置 yum install mariadb-server mariadb #安装 ...

  8. react的props验证

    Props 验证使用 propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效. 当向 props 传入无 ...

  9. Linux常用网络工具:Http压力测试之ab

    ab的全称是Apache Bench,是Apache自带的网络压力测试工具,相比于LR.JMeter,是我所知道的 Http 压力测试工具中最简单.最通用的. ab命令对发出负载的计算机要求很低,不会 ...

  10. word之删除图标目录之间的空行

    在生成图表目录时,发现Office word图表目录中多个标题之间的空行无法删除,我是自己建的标签,比如“图1-”.“图2-”…….“表1-”.“表2-”…… 发现“图1-”.“图2-”…….“表1- ...