天给大家分享一个小网站的数据采集,并写到excel里面!
目标网站是“小咪购”,这里有天猫所有的含有购物券的商品信息,我们今天就来抓它吧!
随便找一段文字,然后点击右键查看网页源代码,看看是否存在该文字,如果存在,那么这个网页就是静态网站了!很幸运,这个网站居然是静态的。
那就简单了,不需要去分析ajax加载数据或者找json包了,直接获取网页源代码==>>匹配相关内容==>>保存数据即可!
Windows+python3.6
import random
import time
import requests
from lxml import etree
import xlwt
用这几个库就可以搞定了!注意xlwt和xlrd这2个库都是操作excel的,一个是保存数据,一个是读取数据,不要搞混了。
首先写一个函数,将所有的爬虫工作写到函数里,如下图
这个网站需要写上headers,不写是抓不到数据的!新建一个列表,将爬到的相关数据写入列表,它的形式大概是这样的:【【产品信息A1,2,3……】,【产品信息B1,2,3……】……】,这么写列表是因为我们最后要将他们写如excel表格,那么列表中的每一个元素(还是列表形式)都是一行数据,方便写入!
注意第33行,列表构成的时候,用+连接会将所有列表中的元素放入一个列表,比如:【1,2,3】+【4,5】=【1,2,3,4,5】,而用append()函数则会将后面的内容作为一个元素加入列表中,比如:[1,2,3].append([4,5])=[1,2,3,[4,5]]
下来就是写入excel了,首先是新建excel表格,并写入第一行数据
后面的数据,依次按格式写入并最后用wb.save(路径)的方式保存即可!完整代码及效果如下
由于网站更新的很快(官方说是10分钟。。。),所以也没有抓取那么多,所有的页面有大约600多页,一页100条信息,也就是说一共有6万多条商品信息,如果不用多线程的话会很慢!
代码在上传的过程中会有压缩,如果实在看不清楚的话,大家可以私信我获取源码!
文主要分享了如何设计一个可扩展的优惠券功能。
1.每个条件的代码独立,相当于单独的实现类实现接口,就能通过配置添加到优惠券条件校验当中,支持多种条件灵活组合
2.新增一种使用条件可以不修改核心流程代码,不需要增加数据库表字段
3.可实现优惠券区分客户端展示,比如在APP可见可用,在小程序不可见不可用
4.可实现优惠券查询适用的商品列表
1.数据库表结构设计
CREATE TABLE `mk_coupon_use_condition` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`bean_name` varchar(64) NOT NULL DEFAULT '' COMMENT 'bean名称(UseCondition的实现类)',
`descrpition` varchar(255) DEFAULT NULL COMMENT '描述',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `uniq_beanname` (`bean_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券使用条件';
CREATE TABLE `mk_coupon_template` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(128) NOT NULL DEFAULT '' COMMENT '优惠券名称',
`max_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '最大优惠金额(元)',
`discount` decimal(12,2) NOT NULL DEFAULT '1.00' COMMENT '折扣',
`condition_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '满X元可用',
`begin_time` datetime NOT NULL COMMENT '发放开始时间',
`end_time` datetime NOT NULL COMMENT '发放结束时间',
`period_type` varchar(8) NOT NULL DEFAULT '' COMMENT '有效期计算方式(fix:领券起X小时内有效,ps:固定开始时间-结束时间)',
`total_num` int(11) NOT NULL DEFAULT '0' COMMENT '发放量',
`left_num` int(11) NOT NULL DEFAULT '0' COMMENT '剩余量',
`limit_num` int(11) NOT NULL DEFAULT '1' COMMENT '每用户限领量',
`use_description` text COMMENT '使用说明',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券模板';
CREATE TABLE `mk_coupon_template_condition` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`coupon_template_id` int(11) NOT NULL COMMENT 'mk_coupon_template.id',
`use_condition` varchar(32) NOT NULL DEFAULT '' COMMENT '使用条件(bean名称,mk_coupon_use_condition.bean_name)',
`use_condition_value` varchar(255) DEFAULT '' COMMENT '使用条件值',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
KEY `idx_coupontemplateid` (`coupon_template_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='优惠券模板-使用条件';
CREATE TABLE `mk_user_coupon` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
`user_id` int(11) NOT NULL COMMENT 'bu_user_info.id',
`coupon_template_id` int(11) NOT NULL COMMENT 'mk_coupon_template.id',
`name` varchar(128) NOT NULL DEFAULT '' COMMENT '优惠券名称',
`max_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '最大优惠金额',
`discount` decimal(12,2) NOT NULL DEFAULT '1.00' COMMENT '折扣',
`condition_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '满X金额可用',
`begin_time` datetime NOT NULL COMMENT '有效期开始时间',
`end_time` datetime NOT NULL COMMENT '有效期结束时间',
`status` varchar(8) NOT NULL DEFAULT '' COMMENT '状态(nouse:未使用/已使用/已过期/未激活/已失效)',
`max_num` int(11) NOT NULL COMMENT '最大叠加数',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_userid` (`user_id`),
KEY `idx_coupontemplateid` (`coupon_template_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户优惠券';
表说明:
mk_coupon_use_condition:主要是记录有哪些使用条件,代码中配置优惠券模板时有用
mk_coupon_template:优惠券发给用户前得先有个模板做配置
mk_coupon_template_condition:某个优惠券模板的使用条件(1对多),条件组合配置就是利用该表
mk_user_coupon:实际给到用户的优惠券,有未使用/已使用等状态,冗余了一部分券模板的数据
数据样例说明:
优惠券模板
优惠券模板使用条件
1)优惠券1只有1个条件CouponBaseCondition,可以理解为全场通用券,只要满足了基本条件就可以使用
2)优惠券2除了条件CouponBaseCondition,还有PlatformCondition,说明除了满足基本条件,还需要满足平台是app才能使用
3)优惠券3除了条件CouponBaseCondition,还有ProductCodeCondition,说明除了满足基本条件,还需要满足指定的商品编码AB3301或AB3302才能使用
2.抽象使用条件,定义一个接口,核心是canUse方法,另外2个方法有其他用途
UseParam说明:
例:如下为‘自动为用户选择最优的优惠券’的代码调用,runtimeAttach设计为Map就是为了灵活接收各种参数:
特殊业务场景说明:
canSee方法:用于解决某张优惠券只有在APP能使用,但是在小程序不能使用的业务场景,利用canSee方法返回true/false决定是否展示该张优惠券,例
filterProduct方法:用于解决根据某张优惠券查询适用商品的功能,一些大型的电商平台就提供该功能,方便用户快速找到能够使用该优惠券的商品列表,如果业务中不需要用到该功能可以忽略该方法
3.核心代码(UseCouponService)中提供4个方法(此处代码过多,就不贴了,可以通过gitee查看源码)
1)用户优惠券列表(未使用、即将过期、已使用、已过期)
应用场景:用户查看自己的优惠券列表
2)用户最优的可用优惠券
应用场景:商品展示券后价、支付时自动为用户选择优惠券
3)用户可用优惠券列表
应用场景:支付时展示选择优惠券的列表
4)判断优惠券能否使用
应用场景:创建订单时校验优惠券
核心思想:遍历优惠券的多个使用条件,判断有1个条件不满足就返回优惠券无法使用
tips:此处利用CompletableFuture优化性能,实现了多线程并发判断每个使用条件,只要有1个条件不满足就立马返回。
4.如何新增1种使用条件?
1)实现接口UseCondition,重写canUse方法,以下为‘首单可用’使用条件的demo代码
把Bean名称配置到券模板使用条件表mk_coupon_template_condition即可使用该条件,无需新增其他代码。
怎么样?如果你觉得有用的话,还不快快收藏起来!!!
附:涉及的代码目录
github:https://github.com/897665787/springcloud-template
gitee:https://gitee.com/jq_di/springcloud-template
宝客多商户系统APP源码是一款针对淘宝客推广人员和消费者的任务聚合平台。通过该源码,用户可以方便地参与推广任务、领取优惠券以及多商家购物。此外,该源码还提供多商户功能,允许商家开设自己的店铺,增加销售渠道和收益。
产品特点:
1. 任务聚合:淘宝客多商户系统APP源码集成了多种推广任务,包括商品分享、邀请好友等,用户可以根据自己的需求选择参与任务,并享受相应的佣金奖励。
2. 优惠券领取:用户可以在平台上方便地搜索并领取淘宝、天猫等电商平台的优惠券,享受更低价格购物的便利。
3. 多商户功能:商家可以在该系统中开设自己的店铺,展示和销售自己的商品,提升曝光度并增加销售渠道和利润。
4. 购物便利性:用户可以通过源码提供的商品搜索功能,快速找到感兴趣的商品,并可以直接在APP中完成下单和支付,提供便捷的购物体验。
5. 账户管理:用户可以通过账户中心对自己的财务收入和推广任务完成情况进行管理和查看,了解自己的收益情况。
6. 社区互动:源码中还具备社区功能,用户可以在平台上分享、评论和互动,获取更多的推广建议和经验。
淘宝客多商户系统APP源码为淘宝客推广人员和消费者提供了更多的推广机会和购物便利,帮助用户提高收益并享受更多优惠。
*请认真填写需求信息,我们会在24小时内与您取得联系。