使用Python爬虫抓取华为商城图片和文字实验丨【我的华为云体验之旅】

举报
香菜聊游戏 发表于 2021/12/18 11:06:22 2021/12/18
【摘要】 今天继续体验华为云的沙箱,在一堆的沙盒中选择了一个感性的爬虫抓取,实验的目的可能不仅仅是抓取的代码,主要还是体验下华为云的使用,目标是明确的,开始吧1、准备环境体验地址:https://lab.huaweicloud.cn/testdetail_468登陆华为云如果曾经用过沙箱,我想着一步都是通用的,只要按照实验手册操作,登陆进去就可以了创建云数据库RDS创建云数据库的目的是为了保存爬取的...

今天继续体验华为云的沙箱,在一堆的沙盒中选择了一个感性的爬虫抓取,实验的目的可能不仅仅是抓取的代码,主要还是体验下华为云的使用,目标是明确的,开始吧

1、准备环境

体验地址:https://lab.huaweicloud.cn/testdetail_468

登陆华为云

如果曾经用过沙箱,我想着一步都是通用的,只要按照实验手册操作,登陆进去就可以了

创建云数据库RDS

创建云数据库的目的是为了保存爬取的数据,毕竟不能只是放在内存中,也是为了体验云数据库。

在已登录的华为云控制台,展开左侧菜单栏,点击“服务列表”->“数据库”->“云数据库 RDS”进入云数据库RDS控制台。 点击“购买数据库实例”。

参数设置可以参照实验手册,这里就不赘述了。

注意这里设置的数据库密码,下面将要用来登陆

注意:若参数配置与实验手册不符,系统将自动清理您创建的资源,由此将导致创建不成功

确认参数无误后点击“提交”完成购买,点击“返回云数据库RDS列表”可查看到正在创建的云数据库RDS,约等待【4-6分钟】数据库状态变为“正常”,说明数据库创建完成

img

创建数据库和表

点击云数据库RDS“rds-spider”进入详情页,选择左侧栏“连接管理”在右侧“公网连接”下,点击“绑定”弹性公网IP,在弹窗中选中弹性公网IP点击“确定”完成绑定

img

弹性公网IP绑定完成,点击“登录”,输入用户名:root,密码:创建云数据库RDS时设置的密码,如下图所示

img

登陆进来之后我们创建数据库vmall 和 数据表,点击“+新建表”,表名:“product”,其他参数默认

添加3个字段分别如下: ①列名id,类型int,长度11,勾选主键,扩展信息如下图(id自增长); ②列名title,类型varchar,长度255,勾选可空; ③列名image,类型varchar,长度255,勾选可空。

注:这里可以随意一些,根据自己的需求进行,没必要一定遵循实验手册

img

2.查看目的网页并编写爬虫代码

环境准备好了,下面开始业务逻辑的编写

业务分析

目标网站:https://sale.vmall.com/huaweizone.html

分析目标地址:https://www.vmall.com/product/10086151859746.html#2801010096501

按“F12”查看网页元素,选择“鼠标跟随”按钮查看元素,然后点击网页中某个元素,可以看到源码界面显示了此元素对应的源码片段,从该源码片段中找到元素class或是id属性,如下图所示:

image-20211218104516567.png

创建爬虫项目并导入

切换到【实验操作桌面】,打开“Xfce终端”,依次执行以下命令在桌面新建项目文件夹。

cd Desktop
scrapy startproject vmall_spider
cd vmall_spider
scrapy genspider -t crawl vmall "vmall.com"

img

在桌面打开Pycharm导入项目,常规操作,没难度,也不赘述了

编写爬虫代码

在项目“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

双击打开“itmes.py”文件,删除原有代码,写入以下代码:

import scrapy
​
​
class VmallSpiderItem(scrapy.Item):
    title=scrapy.Field()
    image=scrapy.Field()

双击打开“pipelines.py”文件,删除原有代码,写入以下代码(使用步骤1.3创建的云数据库RDS的密码、步骤1.4绑定的弹性公网IP替换代码中的相关信息)

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

注意:上面的数据库参数要换成沙箱内的数据

核心代码就上面这些,一些配置相关的代码,可以参照实验手册就不赘述了

3.在弹性云服务器ECS上运行爬虫程序

登陆云服务器进行安装依赖,也就是布置python的运行环境

img

执行下面这些命令,安装环境

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
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip

执行下面这些命令,安装python所需要的三方包

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

上传代码

cd /home/user/Desktop && scp -r ./vmall_spider root@EIP:/root

上传过程如下 :

img

运行代码

再次登陆云服务器

执行以下命令启动爬虫项目,运行片刻(约30秒),按“Ctrl+Z”键停止运行程序。

cd /root/vmall_spider/vmall_spider/ && python3 start.py

查看爬取数据

切换至【实验操作桌面】浏览器已登录云数据库RDS页面,点击“对象列表”->“打开表”如下图所示:

img

可看到已爬取的数据,如下图所示:

img

总结:

整个实验过程基本上就是我们拿到一个新项目的环境搭建过程

  • 首先拿到一台电脑,创建ecs

  • 安装数据库,部署RDS

  • 创建数据库和表,创建数据库vmall 和 表名:“product”

  • 分析业务需求,对网页进行分析

  • 编写代码,实验手册提供了详细的代码

  • 部署代码运行验证,部署服务器环境,上传代码,运行代码

【我的华为云体验之旅】有奖征文火热进行中:https://bbs.huaweicloud.cn/blogs/309059

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。