写给大忙人看的数据库迁移上云与爬取云数据库实例(MySQL)

看完这篇文章后,你将会对云数据库有更深的理解:

1.如何将数据库迁移上云?用什么工具?

前几天我在逛华为云时,发现在做活动,于是我就索性买了一个试试:

在这里插入图片描述
那么,什么是云数据库呢?

云数据库(Relational DatabaseService,简称RDS)是一种基于云计算平台的可即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型数据库服务。RDS具有完善的性能监控体系和多重安全防护措施,并提供专业的数据库管理平台。

与传统服务器相比,云数据库不需要我们购买昂贵的硬件设施,我们按需使用就行,于此同时也能减少很多人力成本,可以说是"居家必备之良品了!"

这里我在本地事先准备好数据,进入云数据库直接导入即可:
在这里插入图片描述
速度很快,两万多行的数据,一眨眼的功夫就搞定了:
在这里插入图片描述
刚刚这个数据库上云的方式是非常的,不需要写什么代码 ,下面我们来试着用python代码导入数据,这里我选择了华为商城的数据:
在这里插入图片描述
我们把手机名称和价格抓取下来,然后存到云数据库中。
这里先穿插一点爬虫小知识:
在这里插入图片描述
找到我们想要的数据后,发现这里有三页:
在这里插入图片描述
每一页的url地址都是不同的:

"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=1&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"
"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=2&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"
"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=3&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"

当然,这里页数比较少,完全可以把这三个url地址放在一个列表urls里,然后再循环取出:

urls = ["https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=1&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f",
		"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=2&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f",
		"https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum=3&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f"]
for url in urls:
	text = requests.get(url)

有没有更好的方法?当然有!

仔细观察这三个url地址有什么不同:
在这里插入图片描述
可以推测出来,这里的数字就是第几页的意思,这样一来,我们使用一个url地址就可以解决问题了:

for item in range(1,4):
    # 获取华为商城源代码
    urls = "https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum={}&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f".format(item)

用一个花括号 {} 替换url地址里的数字,再在最后面加上 .format(item) ,虽然这样仍然需要循环,但是整个代码结构就显得比较清爽!

下面我们在云数据库里建库建表:

CREATE DATABASE vmall;
CREATE TABLE `vmall`.`vmall_product` (
`id` int(50) AUTO_INCREMENT NOT NULL,
`product_name` varchar(50) NULL,
`product_price` varchar(50) NULL,
PRIMARY KEY(`id`)
) DEFAULT CHARACTER SET = utf8,
COLLATE = utf8_general_ci,
ENGINE = InnoDB;

在这里插入图片描述
建好表以后我们来"select * from vmall_product":
在这里插入图片描述

在本地测试一下连接云数据库:
在这里插入图片描述
成功!下面我们把数据保存到云数据库即可:

import requests
import pymysql

product_name = []
product_price = []
# 连接到云数据库
connection = pymysql.connect(host='',
                            port=,
                            user='',
                            password='',
                            db='vmall',
                            charset='utf8',
                            cursorclass=pymysql.cursors.DictCursor)
cursor = connection.cursor()
print("已连接至云数据库!")


for item in range(1,4):
    # 获取华为商城源代码
    urls = "https://openapi.vmall.com/mcp/queryPrd?lang=zh-CN&country=CN&portal=1&keyword=36&pageSize=20&pageNum={}&searchSortField=0&searchSortType=desc&searchFlag=1&brandType=0&tid=1243c72f71ac499fb47b82783b91130e&screenParams=%7B%7D&searchId=db9209766d62f08d1e53a62fdcf7e9134f7502aa3ed58a8f".format(item)
    text = requests.get(urls).json()
    labelList = text["resultList"]

    for i in range(len(labelList)):
        name = labelList[i]['briefName']
        price = labelList[i]['price']
        product_name.append(name)
        product_price.append(price)
        sql = 'insert into vmall_product(product_name,product_price)VALUES(%s,%s)'
        cursor.execute(sql,(name,price))
        connection.commit()
connection.close()
print(product_name)
print(product_price)
print("商品总数为:",len(product_name))

在这里插入图片描述
在云服务器"select * from vmall_product":
在这里插入图片描述

2.怎么抓取云数据库上的数据?

抓取云数据库上的数据也可以说成"出云",我爬取的是我自己的云数据库

在开始之前先把全部源地址放通:在这里插入图片描述
(当然,正式使用云服务器时最好不要这样做!)

下面我们还是先连接云数据库:

import pymysql

class RDS(object):

    def __init__(self):
        # 连接到云数据库
        self.connection = pymysql.connect(host='',
                                    port=,
                                    user='',
                                    password='',
                                    db='bankinfo',
                                    charset='utf8',
                                    cursorclass=pymysql.cursors.DictCursor)
        self.cursor = self.connection.cursor()
        print("已连接至云数据库!")

这里和host,port,user和password还有db都要换成自己的云数据库信息

换句话说,如果别人知道了你的数据库信息,那么你的数据库就有被攻击的风险

下面是获取bankinfo表里所有数据的代码:

def get_all_data(self):
        sql = 'SELECT * FROM bank'
        try:
            self.cursor.execute(sql)
            for item in self.cursor.fetchall():
                print(item)
        except Exception as e:
            print(e)
        self.connection.close()

在这里插入图片描述
2万多条数据一下子就来了

写在最后

这个时代,唯一不变的是变化

it’s never too late,and you are never too old to learn
学习是永无止境的,对于一位与时俱进的developer来说,更是如此。
在这里插入图片描述

发布了60 篇原创文章 · 获赞 123 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/zbp_12138/article/details/104816324