上次我们说到scrapy_redis ,我们把爬去的数据爬到内存里,那我们如何把数据导入数据库
我的思路是 指定redis数据库信息和mysql数据库,然后无限循环从redis读取数据,然后写入mysql里
具体代码如下
# -*- coding: utf-8 -*- import json import redis # pip install redis import pymysql def main(): # 指定redis数据库信息 rediscli = redis.StrictRedis(host='10.15.112.29', port = 6379, db = 0) # 指定mysql数据库 mysqlcli = pymysql.connect(host='10.15.112.29', user='root', passwd='123456', db='py08', charset='utf8') # 无限循环 while True: source, data = rediscli.blpop(["lianjia:items"]) # 从redis里提取数据 item = json.loads(data.decode('utf-8')) # 把 json转字典 try: # 使用cursor()方法获取操作游标 cur = mysqlcli.cursor() # 使用execute方法执行SQL INSERT语句 sql = 'insert into fan1y(title,link,community,housetype,direction,floor,region,totalPrice,followInfo,unitPrice,acreage,frequency) ' \ 'VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)' cur.execute(sql, (item["title"], item["link"], item["community"], item["housetype"], item["direction"], item["floor"], item["region"],item["totalPrice"], item["followInfo"], item["unitPrice"], item["acreage"], item["frequency"])) # 提交sql事务 mysqlcli.commit() #关闭本次操作 cur.close() print ("插入 %s" % item['link']) except pymysql.Error as e: mysqlcli.rollback() print ("插入错误" ,str(e)) if __name__ == '__main__': main()
#要注意的是,字段名要一一对应,还有这个循环停不下来,需要手动终止。
如有错误请指正,谢谢!