Python Scrapy爬虫数据写入操作

在我们写完一个爬虫项目,得到了一大堆的数据,为了以后的分析和使用,我们需要把我们得到的数据进行保存。保存数据的方式主要有:保存到数据库,保存到CSV文件,保存为JSON文件。

保存到数据库中分为同步和异步的方式:

一般小的数据,我们可以选择,同步保存数据库:

首先先准备好数据库文件和数据表

操作在pipelines.py文件中完成

将item写入数据库

importMySQLdb

classMysqlPipeine(object):

def__init__(self):

self.conn = MySQLdb.connect(

host= 'localhost',

# mysql默认端口号3306port= 3306,

user= 'root',

passwd= '123456',

db= 'db_name',

use_unicode= True,

charset= 'utf8')

self.cursor = self.conn.cursor()

# 处理item的函数defprocess_item(self, item, spider):

# 准备sql语句sql = 'insert into table_name(字段名)VALUES (字段数据,即item对象)'self.cursor.execute(sql)

self.conn.commit()

defclose_spider(self, spider):

self.cursor.close()

self.conn.close()

如果数据量较大,异步写入数据库会更高效:

同样操作在我们的pipelines文件中,但在操作之前,需要配置我们的setting文件,在其中添加我们的数据

# 自己配置一些项目信息# 数据库配置MYSQL_HOST = '127.0.0.1'MYSQL_PORT = 3306MYSQL_USER = 'root'MYSQL_PASSWD = '123456'MYSQL_CHARSET = 'utf8'MYSQL_DBNAME = 'db_name'然后在pipelines中进行我们异步写入数据库的操作:

# 将item写入数据库importMySQLdb

classMysqlPipeine(object):

def__init__(self):

self.conn = MySQLdb.connect(

host= 'localhost',

# mysql默认端口号3306port= 3306,

user= 'root',

passwd= '123456',

db= 'db_name',

use_unicode= True,

charset= 'utf8')

self.cursor = self.conn.cursor()

# 处理item的函数defprocess_item(self, item, spider):

# 准备sql语句sql = 'insert into table_name(字段名)VALUES (字段数据,即item对象)' self.cursor.execute(sql)

self.conn.commit()

defclose_spider(self, spider):

self.cursor.close()

self.conn.close()

如果数据量较大,异步写入数据库会更高效:

同样操作在我们的pipelines文件中,但在操作之前,需要配置我们的setting文件,在其中添加我们的数据

# 自己配置一些项目信息# 数据库配置MYSQL_HOST = '127.0.0.1'MYSQL_PORT = 3306MYSQL_USER = 'root'MYSQL_PASSWD = '123456'MYSQL_CHARSET = 'utf8'MYSQL_DBNAME = 'db_name'然后在pipelines中进行我们异步写入数据库的操作:

fromtwisted.enterprise importadbapi

fromMySQLdb importcursors

classMysqlTwistedPipeline(object):

@classmethod# 这个函数会自动调用deffrom_settings(cls, settings):

# 准备好连接数据库需要的参数db_params = dict(

host=settings["MYSQL_HOST"],

port=settings["MYSQL_PORT"],

user=settings["MYSQL_USER"],

passwd=settings["MYSQL_PASSWD"],

charset=settings["MYSQL_CHARSET"],

db=settings["MYSQL_DBNAME"],

use_unicode=True,

# 指定游标类型cursorclass=cursors.DictCursor

)

# 创建连接池# 1.要连接的名称 2.连接需要的参数db_pool = adbapi.ConnectionPool('MySQLdb', **db_params)

# 返回当前类的对象,并且把db_pool赋值给该类的对象returncls(db_pool)

def__init__(self, db_pool):

# 赋值self.db_pool = db_pool

# 处理item函数defprocess_item(self, item, spider):

# 把要处理的事件进行异步处理# 1.要处理的事件函数# 2.事件函数需要的参数query = self.db_pool.runInteraction(self.do_insert, item)

# 执行sql出现错误信息query.addErrback(self.handle_error, item, spider)

# 错误的原因defhandle_error(self, failure, item, spider):

printfailure

# 处理插入数据库的操作# cursor该函数是连接数据库的函数,并且放在异步去执行,cursor执行sql语句defdo_insert(self, cursor, item):

# 1.准备sql语句sql = 'insert into table_name(表中各个字段名)VALUES (各个字段对应的数据item)'# 2.用cursor游标执行sqlcursor.execute(sql)

写入CSV文件的操作:

同样操作在我们的pipelines.py文件中进行

# 写入csv文件importcsv

importcodecs

classSaveCSVFile(object):

def__init__(self):

file_handle = codecs.open('name.csv', 'w', encoding='utf-8')

# 1. 创建csv文件self.csv = csv.writer(file_handle)

self.csv.writerow(表头的信息)

defprocess_item(self, item, spider):

self.csv.writerow(表头信息所对应的每个item对象)

returnitem

def__del__(self):

# 关闭文件self.file_handle.close()

写入json文件:

importjson

classJsonPipeline(object):

def__init__(self):

self.file_handle = codecs.open('name.json', 'w', encoding='utf-8')

defprocess_item(self, item, spider):

data = json.dumps(dict(item), ensure_ascii=False) + "\n"self.file.write(data)

returnitem

def__del__(self):

# 关闭文件self.file_handle.close()

在我们完成pipelines中的函数重写后,一定要记得在setting文件中配置,以确保其能正常执行。

如果同时在pipelines中进行多种方式的写入的话,切记要在process_item函数中返回item,即return item

还有一种简单的保存csv / json文件的方法:

在编辑器命令行输入:scrapy crawl spider - o name.json / csv - s FEED_EXPROT_ENCODING = UTF8

FEED_EXPORT_ENCODING = UTF8指保证文件中的中文正常显示

python爬虫写入数据库_Python爬虫数据写入操作相关推荐

  1. python爬虫导入数据库_python爬虫爬下来的数据怎么导入到MySQL

    展开全部 下载mysql.connector库 然后把爬虫2113爬到的数据5261通过mysql里面的insert语句查到数4102据库,当然也可以建表1653,一般我没用python建表 是先建好 ...

  2. 使用python读取mysql数据库并进行数据的操作

    (一)环境的配置 使用python调用mysql数据库要引进一些库. 目前我使用的python版本是python3.6.引进库为pymysql 其他对应的库可以有以下选择: mysqldb,oursq ...

  3. python网站用什么数据库_使用python读取mysql数据库并进行数据的操作

    简介:(一)环境的配置使用python调用mysql数据库要引进一些库.目前我使用的python版本是python3.6.引进库为pymysql其他对应的库可以有以下选择: mysqldb,oursq ...

  4. python读取mysql数据库行数_使用python读取mysql数据库并进行数据的操作

    (一)环境的配置 使用python调用mysql数据库要引进一些库. 目前我使用的python版本是python3.6.引进库为pymysql 其他对应的库可以有以下选择: mysqldb,oursq ...

  5. 使用python对mysql数据库进行添加数据的操作

    使用python连接mysql进行添加数据的操作 使用的是python3.6+pymysql 1.导入pymysql,并创建数据库连接 import pymysql# 使用python连接mysql数 ...

  6. python爬取微博热搜写入数据库_python爬虫爬取微博热搜

    [实例简介] [实例截图] [核心代码] import requests                #数据抓取库 from lxml import etree         #数据解析库 imp ...

  7. python填写excel内容_python实现数据写入excel表格

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  8. 蓝牙写入数据库_蓝牙 数据写入 简单易懂版(适合没写过蓝牙的看)

    //字符串转arrbuffer function string2buffer(str) { // 首先将字符串转为16进制 let val = "" for (let i = 0; ...

  9. python中print又可将数据写入文件_Python第五课-将写入文件的列表格式化

    1.上节课代码中的问题 第四课中介绍了python持久化的基础实例--将数据写入文本文件. 可当我们试着把保存数据的文件读取出来会怎样呢? try: with open('man.txt', 'r') ...

最新文章

  1. 新技能 MyBatis 千万数据表,快速分页!
  2. Java中List.remove报UnsupportedOperationException异常
  3. category、protocol、delegate总结
  4. java 并发 mobi_Java并发编程的艺术pdf txt mobi下载及读书笔记
  5. 修改ip和计算机名,批量设置IP地址和计算机名
  6. vba循环通过键盘某个按键按下退出循环_默纳克3000+最新系统小键盘的使用方法...
  7. [面试] C/C++ 语法(二)—— 二维数组
  8. Clojure 学习入门(12)- map/pmap
  9. APP银联支付(微信、支付宝、云闪付)
  10. 怎么给图片添加水印?教你一键添加水印
  11. 火狐浏览器设置背景图片
  12. 6款CSS特效边框样式
  13. 单片机问题,24V NPN接近开关信号,怎么接入到单片机
  14. 补码/反码、零扩展和符号位扩展(Zero extension and Sign extension)
  15. 田老师书法工作室学员作品展(二)
  16. JS根据日期计算年龄
  17. 单刀双掷的模拟开关MAX4544
  18. Compose 中的附带效应
  19. angular技巧_提升Angular技能的5个技巧
  20. C#流程控制————分支结构

热门文章

  1. Windows 8 应用开发 - 本地数据存储
  2. Spads 公式解析系统 - Java
  3. 新内容转入github
  4. 前端JS的一些使用方法-持续更新
  5. Android零基础入门第25节:最简单最常用的LinearLayout线性布局
  6. 深入解析String#intern
  7. 【OpenCV学习】Bresenham算法opencv实现
  8. EXT GridPanel
  9. Ubuntu Server系列各项服务的安装和维护 Apache部分
  10. windows下硬盘安装mint10