在上一个课程爬虫课程(九)|Scrapy中items设计及如何把item传给Item Pipeline 中,我们知道了怎么把Item的值传给Pipeline管道,那么这篇文章我们就来介绍下怎么通过Pipeline把数据保存起来。
一、通过Pipeline把数据保存到Json文件
我使用的方法是调用scrapy提供的json export导出json文件,实际上scrapy.exporters提供了导出多个文件的方法,当我们去exporters.py源码查看是,我们发现它提供了8中导出文件的方式,如下图,我们这里只举例保存json格式。
exporters支持导出8中不同格式的文件第一步,先到Pipeline文件编写一个保存json文件的Pipeline,如下图片:
编写Pipeline第二步,把这个DataSubmitJsonFilePipeline配置到settings中,如下图:
settings第三步,执行douban_book爬虫。
执行最后,生成了doubanBook.json文件(默认格式是一行,我使用JSON Parser进行了格式化)。
doubanBook.json二、通过Pipeline把数据保存到MYSQL数据库
第一步,先创建一个数据库spider_db,新建一个表tb_douban_book,并把对应的数据表字段增加上去,如下图,ps:如果有对mysql不了解的,可以留言告诉我,我再决定要不要写一篇文章来介绍下mysql的使用。
新建tb_douban_book表第二步,编写一个插入数据库数据的Pipeline,如下图:
插入数据库的Pipeline第三步,把这个DataSubmitMysqlPipeline配置到settings中,如下图:
配置settings最后,执行douban_book爬虫,查看数据库的结果,所有的数据都成功插入到mysql数据表中。
数据入库三、对上面数据插入MYSQL数据库的说明
我们知道上面的方法是通过同步的方式把Item中的数据插入到MYSQL数据库中,然后在实际应用中,为了能够更快速度地响应数据插入的请求,我们都是采用异步的方式把数据插入MYSQL数据库。
关于使用数据库连接池和异步的方式插入数据库的使用,我们会在后面的课程中讲解。
网友评论
存在这个我问题,请问是什么原因呢?
pipelines.py 如下
import pymysql
import pymysql.cursors
#设置字符集,防止编码参数出错
import sys
import imp
imp.reload(sys)
# 提交数据到mysql
class DataSubmitMySQLPipeline(object):
def __init__(self):
# 填写数据库用户名、数据库名、数据库用户密码、数据库url
self.conn = pymysql.connect(user='root', db='spider_db', passwd='root',
host='127.0.0.1',charset="utf8", use_unicode=True)
self.cursor = self.conn.cursor()
def process_item(self, item, spider):
insert_sql = """
insert into a_test(title, url)
values(%s,%s)
"""
self.cursor.execute(insert_sql, (item["title"], item["url"]))
self.conn.commit()
"""第一步,先创建一个数据库spider_db,新建一个表tb_douban_book,并把对应的数据表字段增加上去,如下图,"""
python3 mysql数据库具体怎么设置能讲讲吗
我一直在尝试pymysql,但一直出错