Scrapy(六):scrapy爬取数据保存到MySql数据库

通过往期的文章分享,我们了解了如何爬取想要的数据到Items中,也了解了如何操作MySQL数据库,那么我们继续完善我们的爬虫代码,把爬取的items,保存到MySQL数据库中。

scrapy构架
为了方便操作,我们自己新建一个mysqlpipelines文件夹,编写自己的pipelines.py文件,来运行保存items,在此文件夹下新建sql.py来编写我们保存数据库的sql语句。
编写sql语句
打开sql.py 编写代码,首先要连接数据库
import pymysql.cursors
# 连接数据库
connect = pymysql.Connect(
 host=MYSQL_HOSTS,port=MYSQL_PORT,user=MYSQL_USER,passwd=MYSQL_PASSWORD, db=MYSQL_DB,charset='utf8'
)
cursor = connect.cursor()# 获取游标
print('连接数据库OK')

数据库连接ok后,我们打印一下,以便测试
新建一个类,编写sql语句
class my_sql:
 @classmethod #插入数据
 def insert_data(cls,novelname,author,category,nameid,status,num,url):
 ...................................................................................
 @classmethod #判断数据是否存在
 def select_name(cls,novelname):
 ................................................................................
 @classmethod # 更新数据
 def update_data(cls,author,category,nameid,status,num,url,novelname):
 ................................................................................
 @classmethod # close sql
 def close_sql(cls):
 cursor.close()
 connect.close()
 print('数据库断开连接OK')

类中我们定义了插入,更新,查询的基本sql语句,最后定义一个关闭数据库的操作,中间操作数据库的详细代码请参考往期文件。
编写pipelines
from myproject.mysqlpipelines.sql import my_sql
from myproject.items import PowersItem
#插入新建的sql与item

定义pipelines
class Powerspipeline(object):
 def process_item(self,item,spider):
 if isinstance(item,PowersItem):#判断item是否存在
 novelname=item['novelname']
 author = item['author']
 category = item['category']
 nameid = item['nameid']
 status = item['status']
 num = item['num']
 url = item['novelurl']
#以上获取爬取的数据
 ret=my_sql.select_name(novelname)#判断数据是否存在在数据库中
 if ret[0]==1:#已经存在
 print('已经存在,等待更新')
#若数据库中有以前的数据,更新数据库
 my_sql.update_data(author,category,nameid,status,num,url,novelname)
 pass
 else:
#若数据库中没有数据,保存item
 print('开始保存')
 my_sql.insert_data(novelname,author,category,nameid,status,num,url)
 else :
 print('no find items')
 return item

通过以上的操作我们爬虫的所有代码就完成了,运行代码就可以从数据库中,看到保存的数据


由于我调试过一次,已经有的数据,再次运行程序时,就会更新数据库。

保存的数据

下期预告:

关于爬虫的内容还有很多,下期我们分享一下爬虫解析网页的一个利器,正则表达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值