整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          python爬蟲,自動(dòng)抓取商品購物券,剁手黨的福利

          python爬蟲,自動(dòng)抓取商品購物券,剁手黨的福利

          天給大家分享一個(gè)小網(wǎng)站的數(shù)據(jù)采集,并寫到excel里面!

          分析網(wǎng)站

          目標(biāo)網(wǎng)站是“小咪購”,這里有天貓所有的含有購物券的商品信息,我們今天就來抓它吧!

          隨便找一段文字,然后點(diǎn)擊右鍵查看網(wǎng)頁源代碼,看看是否存在該文字,如果存在,那么這個(gè)網(wǎng)頁就是靜態(tài)網(wǎng)站了!很幸運(yùn),這個(gè)網(wǎng)站居然是靜態(tài)的。

          那就簡單了,不需要去分析ajax加載數(shù)據(jù)或者找json包了,直接獲取網(wǎng)頁源代碼==>>匹配相關(guān)內(nèi)容==>>保存數(shù)據(jù)即可!

          工具和庫

          Windows+python3.6

          import random

          import time

          import requests

          from lxml import etree

          import xlwt

          用這幾個(gè)庫就可以搞定了!注意xlwt和xlrd這2個(gè)庫都是操作excel的,一個(gè)是保存數(shù)據(jù),一個(gè)是讀取數(shù)據(jù),不要搞混了。

          開始寫代碼

          首先寫一個(gè)函數(shù),將所有的爬蟲工作寫到函數(shù)里,如下圖

          這個(gè)網(wǎng)站需要寫上headers,不寫是抓不到數(shù)據(jù)的!新建一個(gè)列表,將爬到的相關(guān)數(shù)據(jù)寫入列表,它的形式大概是這樣的:【【產(chǎn)品信息A1,2,3……】,【產(chǎn)品信息B1,2,3……】……】,這么寫列表是因?yàn)槲覀冏詈笠獙⑺麄儗懭鏴xcel表格,那么列表中的每一個(gè)元素(還是列表形式)都是一行數(shù)據(jù),方便寫入!

          注意第33行,列表構(gòu)成的時(shí)候,用+連接會(huì)將所有列表中的元素放入一個(gè)列表,比如:【1,2,3】+【4,5】=【1,2,3,4,5】,而用append()函數(shù)則會(huì)將后面的內(nèi)容作為一個(gè)元素加入列表中,比如:[1,2,3].append([4,5])=[1,2,3,[4,5]]

          下來就是寫入excel了,首先是新建excel表格,并寫入第一行數(shù)據(jù)

          后面的數(shù)據(jù),依次按格式寫入并最后用wb.save(路徑)的方式保存即可!完整代碼及效果如下

          由于網(wǎng)站更新的很快(官方說是10分鐘。。。),所以也沒有抓取那么多,所有的頁面有大約600多頁,一頁100條信息,也就是說一共有6萬多條商品信息,如果不用多線程的話會(huì)很慢!

          代碼在上傳的過程中會(huì)有壓縮,如果實(shí)在看不清楚的話,大家可以私信我獲取源碼!

          文主要分享了如何設(shè)計(jì)一個(gè)可擴(kuò)展的優(yōu)惠券功能。

          一、功能特性介紹

          1.每個(gè)條件的代碼獨(dú)立,相當(dāng)于單獨(dú)的實(shí)現(xiàn)類實(shí)現(xiàn)接口,就能通過配置添加到優(yōu)惠券條件校驗(yàn)當(dāng)中,支持多種條件靈活組合

          2.新增一種使用條件可以不修改核心流程代碼,不需要增加數(shù)據(jù)庫表字段

          3.可實(shí)現(xiàn)優(yōu)惠券區(qū)分客戶端展示,比如在APP可見可用,在小程序不可見不可用

          4.可實(shí)現(xiàn)優(yōu)惠券查詢適用的商品列表

          二、核心代碼架構(gòu)圖


          三、代碼實(shí)現(xiàn)

          1.數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì)

          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的實(shí)現(xiàn)類)',
           `descrpition` varchar(255) DEFAULT NULL COMMENT '描述',
           `remark` varchar(255) DEFAULT NULL COMMENT '備注',
           `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
           `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
           PRIMARY KEY (`id`) USING BTREE,
           UNIQUE KEY `uniq_beanname` (`bean_name`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='優(yōu)惠券使用條件';
          
          CREATE TABLE `mk_coupon_template` (
           `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
           `name` varchar(128) NOT NULL DEFAULT '' COMMENT '優(yōu)惠券名稱',
           `max_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '最大優(yōu)惠金額(元)',
           `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 '發(fā)放開始時(shí)間',
           `end_time` datetime NOT NULL COMMENT '發(fā)放結(jié)束時(shí)間',
           `period_type` varchar(8) NOT NULL DEFAULT '' COMMENT '有效期計(jì)算方式(fix:領(lǐng)券起X小時(shí)內(nèi)有效,ps:固定開始時(shí)間-結(jié)束時(shí)間)',
           `total_num` int(11) NOT NULL DEFAULT '0' COMMENT '發(fā)放量',
           `left_num` int(11) NOT NULL DEFAULT '0' COMMENT '剩余量',
           `limit_num` int(11) NOT NULL DEFAULT '1' COMMENT '每用戶限領(lǐng)量',
           `use_description` text COMMENT '使用說明',
           `remark` varchar(255) DEFAULT NULL COMMENT '備注',
           `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
           `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
           PRIMARY KEY (`id`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='優(yōu)惠券模板';
          
          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 '創(chuàng)建時(shí)間',
           `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
           PRIMARY KEY (`id`),
           KEY `idx_coupontemplateid` (`coupon_template_id`)
          ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='優(yōu)惠券模板-使用條件';
          
          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 '優(yōu)惠券名稱',
           `max_amount` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '最大優(yōu)惠金額',
           `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 '有效期開始時(shí)間',
           `end_time` datetime NOT NULL COMMENT '有效期結(jié)束時(shí)間',
           `status` varchar(8) NOT NULL DEFAULT '' COMMENT '狀態(tài)(nouse:未使用/已使用/已過期/未激活/已失效)',
           `max_num` int(11) NOT NULL COMMENT '最大疊加數(shù)',
           `remark` varchar(255) DEFAULT NULL COMMENT '備注',
           `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
           `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
           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='用戶優(yōu)惠券';

          表說明:

          mk_coupon_use_condition:主要是記錄有哪些使用條件,代碼中配置優(yōu)惠券模板時(shí)有用

          mk_coupon_template:優(yōu)惠券發(fā)給用戶前得先有個(gè)模板做配置

          mk_coupon_template_condition:某個(gè)優(yōu)惠券模板的使用條件(1對多),條件組合配置就是利用該表

          mk_user_coupon:實(shí)際給到用戶的優(yōu)惠券,有未使用/已使用等狀態(tài),冗余了一部分券模板的數(shù)據(jù)

          數(shù)據(jù)樣例說明:

          優(yōu)惠券模板

          優(yōu)惠券模板使用條件

          1)優(yōu)惠券1只有1個(gè)條件CouponBaseCondition,可以理解為全場通用券,只要滿足了基本條件就可以使用

          2)優(yōu)惠券2除了條件CouponBaseCondition,還有PlatformCondition,說明除了滿足基本條件,還需要滿足平臺是app才能使用

          3)優(yōu)惠券3除了條件CouponBaseCondition,還有ProductCodeCondition,說明除了滿足基本條件,還需要滿足指定的商品編碼AB3301或AB3302才能使用

          2.抽象使用條件,定義一個(gè)接口,核心是canUse方法,另外2個(gè)方法有其他用途

          UseParam說明:

          例:如下為‘自動(dòng)為用戶選擇最優(yōu)的優(yōu)惠券’的代碼調(diào)用,runtimeAttach設(shè)計(jì)為Map就是為了靈活接收各種參數(shù):

          特殊業(yè)務(wù)場景說明:

          canSee方法:用于解決某張優(yōu)惠券只有在APP能使用,但是在小程序不能使用的業(yè)務(wù)場景,利用canSee方法返回true/false決定是否展示該張優(yōu)惠券,例

          filterProduct方法:用于解決根據(jù)某張優(yōu)惠券查詢適用商品的功能,一些大型的電商平臺就提供該功能,方便用戶快速找到能夠使用該優(yōu)惠券的商品列表,如果業(yè)務(wù)中不需要用到該功能可以忽略該方法

          3.核心代碼(UseCouponService)中提供4個(gè)方法(此處代碼過多,就不貼了,可以通過gitee查看源碼)

          1)用戶優(yōu)惠券列表(未使用、即將過期、已使用、已過期)

          應(yīng)用場景:用戶查看自己的優(yōu)惠券列表

          2)用戶最優(yōu)的可用優(yōu)惠券

          應(yīng)用場景:商品展示券后價(jià)、支付時(shí)自動(dòng)為用戶選擇優(yōu)惠券

          3)用戶可用優(yōu)惠券列表

          應(yīng)用場景:支付時(shí)展示選擇優(yōu)惠券的列表

          4)判斷優(yōu)惠券能否使用

          應(yīng)用場景:創(chuàng)建訂單時(shí)校驗(yàn)優(yōu)惠券

          核心思想:遍歷優(yōu)惠券的多個(gè)使用條件,判斷有1個(gè)條件不滿足就返回優(yōu)惠券無法使用

          tips:此處利用CompletableFuture優(yōu)化性能,實(shí)現(xiàn)了多線程并發(fā)判斷每個(gè)使用條件,只要有1個(gè)條件不滿足就立馬返回。

          4.如何新增1種使用條件?

          1)實(shí)現(xiàn)接口UseCondition,重寫canUse方法,以下為‘首單可用’使用條件的demo代碼

          把Bean名稱配置到券模板使用條件表mk_coupon_template_condition即可使用該條件,無需新增其他代碼。


          怎么樣?如果你覺得有用的話,還不快快收藏起來!!!


          附:涉及的代碼目錄

          github:https://github.com/897665787/springcloud-template

          gitee:https://gitee.com/jq_di/springcloud-template

          寶客多商戶系統(tǒng)APP源碼是一款針對淘寶客推廣人員和消費(fèi)者的任務(wù)聚合平臺。通過該源碼,用戶可以方便地參與推廣任務(wù)、領(lǐng)取優(yōu)惠券以及多商家購物。此外,該源碼還提供多商戶功能,允許商家開設(shè)自己的店鋪,增加銷售渠道和收益。

          產(chǎn)品特點(diǎn):
          1. 任務(wù)聚合:淘寶客多商戶系統(tǒng)APP源碼集成了多種推廣任務(wù),包括商品分享、邀請好友等,用戶可以根據(jù)自己的需求選擇參與任務(wù),并享受相應(yīng)的傭金獎(jiǎng)勵(lì)。
          2. 優(yōu)惠券領(lǐng)取:用戶可以在平臺上方便地搜索并領(lǐng)取淘寶、天貓等電商平臺的優(yōu)惠券,享受更低價(jià)格購物的便利。
          3. 多商戶功能:商家可以在該系統(tǒng)中開設(shè)自己的店鋪,展示和銷售自己的商品,提升曝光度并增加銷售渠道和利潤。
          4. 購物便利性:用戶可以通過源碼提供的商品搜索功能,快速找到感興趣的商品,并可以直接在APP中完成下單和支付,提供便捷的購物體驗(yàn)。
          5. 賬戶管理:用戶可以通過賬戶中心對自己的財(cái)務(wù)收入和推廣任務(wù)完成情況進(jìn)行管理和查看,了解自己的收益情況。
          6. 社區(qū)互動(dòng):源碼中還具備社區(qū)功能,用戶可以在平臺上分享、評論和互動(dòng),獲取更多的推廣建議和經(jīng)驗(yàn)。

          淘寶客多商戶系統(tǒng)APP源碼為淘寶客推廣人員和消費(fèi)者提供了更多的推廣機(jī)會(huì)和購物便利,幫助用戶提高收益并享受更多優(yōu)惠。


          主站蜘蛛池模板: 精品一区二区三区电影| 亚洲性日韩精品国产一区二区| 国产一区二区三区不卡观| 色偷偷av一区二区三区| 青娱乐国产官网极品一区 | 国产精品视频一区国模私拍| 日本一区二区三区在线看| 亚洲爽爽一区二区三区| 无码精品尤物一区二区三区| 国产成人一区二区动漫精品| 亚洲一区无码中文字幕乱码| 国产精品视频无圣光一区| 无码精品一区二区三区| 无码av免费一区二区三区| 亚洲日韩国产一区二区三区| 日韩精品午夜视频一区二区三区| 亚洲一区二区三区91| 中文人妻无码一区二区三区| 久久99国产一区二区三区| 日韩国产一区二区| 精品乱人伦一区二区| 日本一区二区三区久久| 无码人妻精品一区二区三区不卡 | 成人区人妻精品一区二区不卡| 日韩精品无码一区二区中文字幕| 日本大香伊一区二区三区| 久久精品国产一区二区电影| 日韩精品一区二区三区中文字幕| 日韩美女视频一区| 国产精品免费综合一区视频| 精产国品一区二区三产区| 亚洲大尺度无码无码专线一区| 色狠狠色狠狠综合一区| 97精品一区二区视频在线观看| 在线观看亚洲一区二区| 国产日本一区二区三区| 中文字幕乱码人妻一区二区三区| 精品人妻系列无码一区二区三区| 亚洲综合一区二区精品久久| 精品国产一区AV天美传媒| 中文字幕无线码一区2020青青|