* 打卡—>什么是云数据库 && 沙箱实验如何用 python 和数据库来爬虫?【华为云至简致远】
【摘要】 本文简单的介绍了什么是云数据库以及云数据库的实战
简介:
云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。
企业伴随着业务的增长,成倍增长的数据需要更多的存储空间,此时,云数据库有助于应对许多这些数据库方面的挑战。
让用户能够在云中轻松设置、操作和扩展关系数据库,并可以充分结合公有云中的计算、网络与存储服务,从而以一种安全、可扩展、可靠的方式,迅速选择、配置和运行数据管理基础设施,使用户能专注于自身应用程序和业务。
RDS 是关系型数据库(Relational Database Service),一种基于云计算的可即开即用、稳定可靠、弹性伸缩、便捷管理的在线关系型云数据库服 务。
虽然客户可以在云服 务器上自建 MySQL,而其也会带有部分云特性:数据高可靠性保障、弹性扩展、基础运维等。但与在云服 务器自建数据库相比,RDS 为单位提供更多的自动化服 务,如:数据库自动备份、IP 白名单、详细的实时监控、容灾、读写分离等,还避免了云服 务器带来的异常,如云服 务器 CPU 偶尔会被 mysql 进程拉到 100%。华云数据 RDS 提供了容灾、备份、恢复、监控、迁移等方面的全套解决方案,支持将本地数据库迁移到 RDS,平滑完成数据库的迁移工作,彻底解决数据库运维的烦恼。
云数据库的特性有:实例创建快速、支持只读实例、故障自动切换、数据备份、Binlog 备份、访问白名单、监控与消息通知。由此可知道两者的不同,拿华为云来比较说明:
1.在服务可用性方面和数据可靠性来说,华为云提供的云数据库 RDS 是 99.95%可用的;而在自建数据库服务中,需自行保障, 自行搭建主从复制,自建 RAID 等。
2.华为云数据库 RDS 可防 DDoS 攻击,流量清洗,能及时有效地修复各种数据库安全漏洞;而在自购服务器搭建的传统数据库,则需自行部署,价格高昂,同时也需自行修复数据库安全漏洞。
3.华为云数据库 RDS 可自动为数据库进行备份,而自购服务器搭建的传统数据库需自行实现,同时需要寻找备份存放空间以及定期验证备份是否可恢复。
4.华为云数据库 RDS 无需运维,而传统数据库需招聘专职 DBA 来维护,花费大量人力成本。
5.华为云数据库 RDS 即时开通,快速部署,弹性扩容,按需开通,而传统数据库需硬件采购、机房托管、部署机器等工作,周期较长。
6.华为云数据库 RDS 按实际结算,100%利用率,而自购服务器搭建的传统数据库需考虑峰值,资源利用率很低。
通过上述比较可以看出,云数据库 RDS 产品是高性能、高安全、高可靠、便宜易用的数据库服务系统,并且可以有效地减轻用户的运维压力,为用户带来安全可靠的全新体验。
赶上 618 还有新人特惠哦!
实验:
1:准备环境 1.1 预置环境
点击上方的预置环境按钮 约等待 3 分钟后语置成功
环境预置会生成资源:名称为“python-spider”的弹性云服务器 ECS、创建配置相关的 VPC、共享带宽,弹性公网 IP、安全组。
1.2.登录华为云进入【实验操作桌面】,打开 Chrome 浏览器,首次可自动登录并进入华为云控制台页面
1.3.创建云数据库 RDS
在已登录的华为云控制台,展开左侧菜单栏,点击“服务列表”->“数据库”->“云数据库 RDS”进入云数据库 RDS 控制台。
点击“购买数据库实例”。
计费模式:按需计费;
② 区域:华北-北京四;
③ 实例名称:自定义,如 rds-spider;
④ 数据库引擎:MySQL;
⑤ 数据库版本:5.7;
⑥ 实例类型:单机;
⑦ 存储类型:SSD 云盘;
⑧ 可用区:可用区二;
⑨ 时区:UTC+08:00;如下图所示:
性能规格:通用型,2 核 | 4GB;
② 存储空间:40GB;
③ 硬盘加密:不加密;
④ 虚拟私有云:选择预置环境预置的虚拟私有云;
⑤ 内网安全组:选择预置环境预置的内网安全组;
⑥ 数据库端口:默认(3306);
⑦ 设置密码:现在设置;
⑧ 管理员密码:自定义,如 rIDM7g4nl5VxRUpI(请牢记设置的密码);
⑨ 参数模板:默认;
⑩ 购买数量:1;
⑪ 只读实例:暂不购买;
如下图所示:
点击“提交”完成购买->点击“返回云数据库 RDS 列表”可查看到正在创建的云数据库 RDS,约等待【4-6 分钟】数据库状态变为“正常”,说明数据库创建完成,如下图所示
1.4.创建数据库及数据库表点击云数据库 RDS“rds-spider”进入详情页,在左侧导航栏,单击“连接管理”->“公网地址”->单击“绑定”->“确定”。如下图所示:
弹性公网 IP 绑定完成,点击“登录”,输入用户名:root,密码:创建云数据库 RDS 时设置的密码,如下图所示:
点击“登录”进入数据库列表,然后点击“+新建数据库”,数据库名称为“vmall”,点击“确定”,完成数据库创建,如下图所示
在新建的数据库右侧点击“新建表”,如下图所示:
进入数据库“vmall”的表管理页,点击“+新建表”,表名:“product”,其他参数默认,点击“下一步”如下图所示:
添加 3 个字段分别如下:
①列名 id,类型 int,长度 11,勾选主键,扩展信息如下图(id 自增长);
②列名 title,类型 varchar,长度 255,勾选可空;
③列名 image,类型 varchar,长度 255,勾选可空。
设置完成点击“立即创建”,弹出 SQL 预览页面,如下图所示:
点击“执行脚本”完成表创建。
查看目的网页并编写爬虫代码洞察目的网页在【实验操作桌面】浏览器新建 tab 页,输入华为商城地址并访问:https://sale.vmall.com/huaweizone.html,在打开的页面选择一件商品打开商品详情页,如下图所示:
按“F12”查看网页元素,选择“鼠标跟随”按钮查看元素,然后点击网页中某个元素,可以看到源码界面显示了此元素对应的源码片段,从该源码片段中找到元素 class 或是 id 属性,如下图所示:
2.2
切换到【实验操作桌面】,打开“Xfce 终端”,依次执行以下命令在桌面新建项目文件夹。
命令如下:
cd Desktop
scrapy startproject vmall_spider
cd vmall_spider
scrapy genspider -t crawl vmall "vmall.com"
执行成功如下图所示:
启动“Pycharm”,启动成功点击“File”->“Open”,选择创建的项目“vmall_spider”如下图所示:
点击“OK”->“This Window”完成项目导入。
2.3
编写爬虫代码在项目
“vmall_spider”->“spiders”下,双击打开“vmall.py”文件,删除原有代码,写入以下代码:
import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from vmall_spider.items import VmallSpiderItem class VamllSpider(CrawlSpider): name = 'vamll' allowed_domains = ['vmall.com'] start_urls = ['https://sale.vmall.com/huaweizone.html'] rules = ( Rule(LinkExtractor(allow=r'./product/.'), callback='parse_item', follow=True), ) def parse_item(self, response): title=response.xpath("//div[@class='product-meta product-global']/h1/text()").get() price=response.xpath("//div[@class='product-price-info']/span/text()").get() image=response.xpath("//a[@id='product-img']/img/@src").get() item=VmallSpiderItem( title=title, image=image, ) print("="*30) print(title) print(image) print("="*30) yield item
按“Ctrl+s”键保存,如下图所示:
双击打开“itmes.py”文件,删除原有代码,写入以下代码:
Define here the models for your scraped items
See documentation in:
https://docs.scrapy.org/en/latest/topics/items.html import scrapy class VmallSpiderItem(scrapy.Item): title=scrapy.Field() image=scrapy.Field()
按“Ctrl+s”键保存,如下图所示:
双击打开“pipelines.py”文件,删除原有代码,写入以下代码(使用步骤 1.3 创建的云数据库 RDS 的密码、步骤 1.4 绑定的弹性公网 IP 替换代码中的相关信息)
Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html # useful for handling different item types with a single interface import pymysql import os from urllib import request class VmallSpiderPipeline: def init(self): dbparams={ 'host':'124.70.15.164', #云数据库弹性公网 IP 'port':3306, #云数据库端口 'user':'root', #云数据库用户 'password':'rIDM7g4nl5VxRUpI', #云数据库 RDS 密码 'database':'vmall', #数据库名称 'charset':'utf8' } self.conn=pymysql.connect(**dbparams) self.cursor=self.conn.cursor() self.sql=None self.path=os.path.join(os.path.dirname(os.path.dirname(file)),'images') if not os.path.exists(self.path): os.mkdir(self.path) def process_item(self,item,spider): url=item['image'] image_name=url.split('')[-1] print("--------------------------image_name-----------------------------") print(image_name) print(url) request.urlretrieve(url,os.path.join(self.path,image_name)) self.cursor.execute(self.sql,(item['title'], item['image'])) self.conn.commit() return item @property def sql(self): if not self._sql: self._sql=""" insert into product(id,title,image) values(null,%s,%s) """ return self._sql return self._sql
替换信息如下图所示,然后按“Ctrl+s”键保存。
鼠标右键“vmall_spider”(目录第二层)点击“new”->“Python File”创建“start.py”文件,填入名称“start”,点击“OK”如下图所示:
写入以下代码。
from scrapy import cmdline cmdline.execute("scrapy crawl vamll".split())
按“Ctrl+s”键保存,如下图所示:
双击打开“settings.py”文件,删除原有代码,写入以下代码:
Scrapy settings for vmall_spider project # python-spider-rds # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # https://docs.scrapy.org/en/latest/topics/settings.html # https://docs.scrapy.org/en/latest/topics/downloader-middleware.html # https://docs.scrapy.org/en/latest/topics/spider-middleware.html import os BOT_NAME = 'vmall_spider' SPIDER_MODULES = ['vmall_spider.spiders'] NEWSPIDER_MODULE = 'vmall_spider.spiders' # Crawl responsibly by identifying yourself (and your website) on the user-agent # USER_AGENT = 'vmall_spider (+http://www.yourdomain.com)' # Obey robots.txt rules # ROBOTSTXT_OBEY = True ROBOTSTXT_OBEY = False # Configure maximum concurrent requests performed by Scrapy (default: 16) # CONCURRENT_REQUESTS = 32 # Configure a delay for requests for the same website (default: 0) # See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs DOWNLOAD_DELAY = 3 # The download delay setting will honor only one of: # CONCURRENT_REQUESTS_PER_DOMAIN = 16 # CONCURRENT_REQUESTS_PER_IP = 16 # Disable cookies (enabled by default) # COOKIES_ENABLED = False # Disable Telnet Console (enabled by default) # TELNETCONSOLE_ENABLED = False # Override the default request headers: # DEFAULT_REQUEST_HEADERS = { # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8', # 'Accept-Language': 'en', # } DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8', 'Accept-Language': 'en', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11', 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16' } # Enable or disable spider middlewares # See https://docs.scrapy.org/en/latest/topics/spider-middleware.html # SPIDER_MIDDLEWARES = { # 'vmall_spider.middlewares.VmallSpiderSpiderMiddleware': 543, # } # Enable or disable downloader middlewares # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html # DOWNLOADER_MIDDLEWARES = { # 'vmall_spider.middlewares.SeleniumDownloadMiddleware': 543, # } # Enable or disable extensions # See https://docs.scrapy.org/en/latest/topics/extensions.html # EXTENSIONS = { # 'scrapy.extensions.telnet.TelnetConsole': None, # } # Configure item pipelines # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { 'vmall_spider.pipelines.VmallSpiderPipeline': 300, } # Enable and configure the AutoThrottle extension (disabled by default) # See https://docs.scrapy.org/en/latest/topics/autothrottle.html # AUTOTHROTTLE_ENABLED = True # The initial download delay
AUTOTHROTTLE_START_DELAY = 5 # The maximum download delay to be set in case of high latencies # AUTOTHROTTLE_MAX_DELAY = 60 # The average number of requests Scrapy should be sending in parallel to # each remote server # AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 # Enable showing throttling stats for every response received: # AUTOTHROTTLE_DEBUG = False # Enable and configure HTTP caching (disabled by default) # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings # HTTPCACHE_ENABLED = True # HTTPCACHE_EXPIRATION_SECS = 0 # HTTPCACHE_DIR = 'httpcache' # HTTPCACHE_IGNORE_HTTP_CODES = [] # HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage
按“Ctrl+s”键保存,部分代码截图如下图所示
在弹性云服务器 ECS 上运行爬虫程序安装所需依赖登录弹性云服务器 ECS:切换到【实验操作桌面】已打开的“Xfce 终端”,执行以下命令(使用弹性云服务器 ECS 的公网 IP 替换命令中的【EIP】),登录云服务器;
ssh root@EIP
说明: 在华为云控制点展开左侧菜单栏,点击“服务列表”->“计算”->“弹性云服务器 ECS”进入管理列表,可查看复制名称为“python-spider”的 ECS 服务器的弹性公网 IP。
接受秘钥输入“yes”,回车;
输入密码:使用预置环境信息中云服务器名称为 python-spider 的用户密码(输入密码时,命令行窗口不会显示密码,输完之后直接键入回车)。登录成功如下图所示:
依次执行以下命令安装所需依赖。
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
安装成功如下图所示:
依次执行以下命令安装依赖
yum install gcc libffi-devel python-devel openssl-devel -y
yum install libxslt-devel -y
执行成功如下图所示:
执行以下命令升级 pip。
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
执行成功如下图所示:
依次执行以下命令安装 pip 依赖。
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple scrapy
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pymysql
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pillow
执行成功依次如下图所示:
3.2 上传爬虫项目并运行
执行以下命令退出弹性云服务器 ECS 登录状态。
exit 退出
如下图所示:
执行以下命令(使用弹性云服务器 ECS 的弹性公网 IP 替换命令中的 EIP)上传项目到弹性云服务器 ECS,提示输入密码为:使用预置环境信息中云服务器名称为 python-spider 的用户密码
cd /home/user/Desktop && scp -r ./vmall_spider root@EIP:/root
完成上传操作,如下图所示:.
仿照步骤 3.1 重新登录弹性云服务器 ECS,登录成功后执行以下命令,可查看到上传的项目。
Ls
如下图所示:
执行以下命令启动爬虫项目,运行片刻(约 30 秒),按“Ctrl+Z”键停止运行程序。
cd /root/vmall_spider/vmall_spider/ && python3 start.py
运行成功如下图所示:
查看爬取数据切换至【实验操作桌面】浏览器已登录云数据库 RDS 页面,点击“对象列表”->“打开表”如下图所示:
可看到已爬取的数据,如下图所示:
存储爬取图片至对象存储服务 OBS 创建对象存储服务 OBS 切换至弹性云服务器列表页,展开左侧菜单栏,点击“服务列表”->“存储”->“对象存储服务 OBS”进入管理列表。点击“创建桶”填写参数如下:① 复制配置:不选,默认即可
② 区域:华北-北京四
③ 数据冗余储存策略:单 AZ 存储
④ 桶名称:任意填写,如 obs-spider
⑤ 存储类别:标准存储
⑥ 桶策略:私有
⑦ 默认加密:关闭
⑧ 归档数据直读: 关闭
⑨ 存储包超值购:不选择其他参数默认,如下图所示
点击“立即创建”->“确定”完成对象存储服务 OBS 桶的创建,如下图所示:
4.2 安装对象存储服务 OBS 客户端
在弹性云服务器 ECS 上安装对象存储服务 OBS 客户端。切换至已登录弹性云服务器 ECS 的命令行界面,执行以下命令下载“obsutil”工具。
下载成功如下图所示:
执行以下命令解压“obsutil”工具。
tar zvxf obsutil_linux_amd64.tar.gz
解压成功如下图所示:
切换至实验浏览器华为云控制台页面,在右上角账号名下拉菜单中选择“我的凭证”->“访问秘钥”,进入创建管理访问密钥(AK/SK)的界面。位置如下图所示:
请删除原有的访问密钥,再进行新密钥的创建。点击【新增访问密钥】,在弹框中点击【确定】即可完成新增,然后点击“立即下载”选择“保存文件”->“确定”, 将密钥保存至浏览器默认文件保存路径/home/user/Downloads/,妥善保存系统自动下载的“credentials.csv”文件中的 AK(Access Key Id)和 SK(Secret Access Key)以备后面操作使用。
AK 和 SK 查看方式:切换至【实验操作桌面】双击图标“Xfce 终端”新打开一个命令行界面,输入以下命令,切换到目录(/home/user/Downloads/)下。
cd /home/user/Downloads/
vi credentials.csv
内容如图所示:
切换到已登录弹性云服务器 ECS 的命令行界面,执行以下命令(使用上图所示 AK、SK 替换命令中的“your_ak”、“your_sk”),初始化“obsutil”。
./obsutil_linux_amd64_5.2.5/obsutil config -i=your_ak -k=your_sk -e=https://obs.cn-north-4.myhuaweicloud.com
初始化成功如下图所示:
执行以下命令查看“obsutil”连通性。
./obsutil_linux_amd64_5.2.5/obsutil ls -s
连通正常如下图所示:
上传爬取图片至对象存储服务 OBS 并查看继续执行以下命令【使用创建的对象存储服务 OBS 的名称(如:obs-spider)替换命令中的“your_bucket_name”】,上传爬取到的图片。
/root/obsutil_linux_amd64_5.2.5/obsutil cp /root/vmall_spider/images obs://your_bucket_name -f -r -vmd5 -flat -u
执行成功如下图所示:
仿照 4.1 步骤找到创建的对象存储服务 OBS,点击名称打开详情页,点击左侧栏“对象”可看到上传保存的爬取图片,如下图所示:
任意点击图片名称进入详情,选择“图片预览”可预览爬取的图片如下图所示:
最后:
云数据库华为云从 2007 年部署至今已经是获得了广大的市场份额 也算是业界的扛把子了不管是从产品角度出发还是实战经验和客户体验都是很不错的选择~
【华为云至简致远】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/345260
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
想了解更多的华为云产品相关信息,请联系我们:电话:950808 按 0 转 1
评论