華為云沙箱實驗之使用Python爬蟲抓取圖片和文字實驗丨【我的華為云體驗之旅】
1.準備環境
1.1.預置環境
點擊上方“預置實驗環境”按鈕,【約等待3分鐘】后預置成功。預置成功后ECS資源用戶、密碼信息可點擊預置環境信息查看。環境預置會生成資源:名稱為“python-spider”的彈性云服務器ECS、創建配置相關的VPC、共享帶寬,彈性公網IP、安全組。
1.2.登錄華為云
進入【實驗操作桌面】,打開Chrome瀏覽器,首次可自動登錄并進入華為云控制臺頁面,選擇【IAM用戶登錄】模式,于登錄對話框中輸入系統為您分配的華為云實驗賬號和密碼登錄華為云,如下圖所示:
1.3.創建云數據庫RDS
在已登錄的華為云控制臺,展開左側菜單欄,點擊“服務列表”->“數據庫”->“云數據庫 RDS”進入云數據庫RDS控制臺,點擊“購買數據庫實例”。
參數配置如下圖所示:
參數設置完成點擊“立即購買”,確認參數無誤后點擊“提交”完成購買,點擊“返回云數據庫RDS列表”可查看到正在創建的云數據庫RDS,約等待【4-6分鐘】數據庫狀態變為“正常”,說明數據庫創建完成,如下圖所示:
1.4.創建數據庫及數據庫表
點擊云數據庫RDS“rds-spider”進入詳情頁,在左側導航欄,單擊“連接管理”->“公網地址”->單擊“綁定”->“確定”。如下圖所示:
彈性公網IP綁定完成,點擊“登錄”,輸入用戶名:root,密碼:創建云數據庫RDS時設置的密碼,如下圖所示:
點擊“登錄”進入數據庫列表,然后點擊“+新建數據庫”,數據庫名稱為“vmall”,點擊“確定”,完成數據庫創建,如下圖所示:
在新建的數據庫右側點擊“新建表”,如下圖所示:
進入數據庫“vmall”的表管理頁,點擊“+新建表”,表名:“product”,其他參數默認,點擊“下一步”如下圖所示:
添加3個字段如下圖所示:
設置完成點擊“立即創建”,彈出SQL預覽頁面,如下圖所示:
點擊“執行腳本”完成表創建。
2.查看目的網頁并編寫爬蟲代碼
2.1.洞察目的網頁
在【實驗操作桌面】瀏覽器新建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.編寫爬蟲代碼
(1)在項目“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("http://div[@class='product-meta product-global']/h1/text()").get() price=response.xpath("http://div[@class='product-price-info']/span/text()").get() image=response.xpath("http://a[@id='product-img']/img/@src").get() item=VmallSpiderItem( title=title, image=image, ) print("="*30) print(title) print(image) print("="*30) yield item
(2)雙擊打開“itmes.py”文件,刪除原有代碼,寫入以下代碼:
import scrapy class VmallSpiderItem(scrapy.Item): title=scrapy.Field() image=scrapy.Field()
(3)雙擊打開“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
(4)鼠標右鍵“vmall_spider”(目錄第二層)點擊“new”->“Python File”創建“start.py”文件,寫入以下代碼。
from scrapy import cmdline cmdline.execute("scrapy crawl vamll".split())
(5)雙擊打開“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
至此代碼編寫完成。
3.在彈性云服務器ECS上運行爬蟲程序
3.1.安裝所需依賴
登錄彈性云服務器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
運行成功如下圖所示:
3.3.查看爬取數據
切換至【實驗操作桌面】瀏覽器已登錄云數據庫RDS頁面,點擊“對象列表”->“打開表”如下圖所示:
可看到已爬取的數據,如下圖所示:
4.存儲爬取圖片至對象存儲服務OBS
4.1.創建對象存儲服務OBS
切換至彈性云服務器列表頁,展開左側菜單欄,點擊“服務列表”->“存儲”->“對象存儲服務OBS”進入管理列表。點擊“創建桶”填寫參數如下圖所示:
點擊“立即創建”->“確定”完成對象存儲服務OBS桶的創建,如下圖所示:
4.2.安裝對象存儲服務OBS客戶端
在彈性云服務器ECS上安裝對象存儲服務OBS客戶端。
切換至已登錄彈性云服務器ECS的命令行界面,執行以下命令下載“obsutil”工具。
cd ~ && wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/python-spider-rds/obsutil_linux_amd64.tar.gz
執行以下命令解壓“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/
輸入以下命令,即可查看AK和SK內容:
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
連通正常如下圖所示:
4.3.上傳爬取圖片至對象存儲服務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,點擊名稱打開詳情頁,點擊左側欄“對象”可看到上傳保存的爬取圖片,如下圖所示:
任意點擊圖片名稱進入詳情,選擇“圖片預覽”可預覽爬取的圖片如下圖所示:
至此試驗全部完成。
【我的華為云體驗之旅】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/309059
Python 彈性云服務器 ECS
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。