原创 京东自动保价脚本

发布时间:2021-06-24 15:30:40 浏览 1719 来源:猿笔记 作者:python技术

    ####获取保价列表,打开京东保价页面(,1下面的代码获取可以保价的订单列表包含订单号和商品的sku号和数量,get_order_list()函数循环获取订单列表,skuProResultPC()函数判断这个订单是否超了保价时间,在获取保价列表中。分析元素可知在页面的js中,把这些数据当做参数提交到url(:当购买商品时未使用优惠券,可以联系客服进行价格保护:这里抓取优惠券并打印出来,到这里已经取到了商品的当前价格、优惠券和购买数量:还剩下订单的下单价格需要获取。这个价格就是第一张图中的金额,我们使用订单号和sku号作为参数:批量查询下单价格。


    # # # #正文:某某白米

    #####来源:Python技术[公众号ID:pythonall]

    # # JD.COM保险自动化

    大家肯定在618买了不少东西,还有商家喜欢偷偷降价,让我们觉得瞬间亏了一个亿。今天我要带一份JD.COM的自动投保剧本。

    # # # #获取保险清单

    首先,你需要登录JD.COM,618里面列的!是JD.COM PC版写的,用二维码登录的,可以看看。

    打开JD.COM保险页面(

    按F12获取下一页元素

    将全局变量放在首位

    pythonuser_agent='Mozilla/5.0(Macintosh;IntelMacOSX10_15_4)AppleWebKit/537.36(KHTML,likeGecko)Chrome/81.0.4044.138Safari/537.36'session=requests.session()

    以下代码获取可以投保的订单列表,包括订单编号、sku编号和货物数量。共有三个函数,get_PIN()函数获取PIN值,get_order_list()函数循环获取订单列表,skuProResultPC()函数判断该订单是否超过保用时间。

    pythondefget_pin():"""获取PIN,用正则表达式从页面中取出"""url="https://pcsitepp-fm.jd.com/"r=session.get(url)loginPin=re.findall('',r.text)pin=loginPin[0]iflen(loginPin)>0elseNonereturnpindefget_order_list(pin,page_num=1):"""保价列表"""#存放订单信息order_info=[]#存放数量count_dir={}url="https://pcsitepp-fm.jd.com/rest/pricepro/priceskusPull"data={"page":page_num,"pageSize":10}headers={'User-Agent':user_agent,'Referer':'https://pcsitepp-fm.jd.com/',}r=session.post(url,headers=headers,data=data)#订单之间的分隔符orders=r.text.split('')orders.pop(0)foriteminorders:#订单号orderid=re.findall("订单号:(\\d+)",item)#数量count=re.findall('\([\\sx\\d]+)',item)#商品的sku和序号skuidAndSequences=re.findall("queryOrderSkuPriceParam\\.skuidAndSequence\\.push\\(\\"(\\d+\\,\\d+)\\"\\)\\;",item)newSkuidAndSequences=[]#商品的sku和订单商品的序号forssinskuidAndSequences:#判断订单保价是否超时ifskuProResultPC(orderid[0],ss.split(',')[0],pin):newSkuidAndSequences.append(ss)iforderid[0]=='117403228624':print(orderid[0])count_ss=count_html[int(ss.split(',')[1])-1]count=count_ss.replace('\\t','').replace('\','').replace('x','')#把"订单号_sku"当做keycount_dir[orderid[0]+'_'+ss.split(',')[0]]=countifnewSkuidAndSequences:order_info.append({'orderid':orderid[0],'skuidAndSequence':newSkuidAndSequences})iforders:"""递归的方式获取所有的商品"""bill_info_sub,count_dir_sub=get_order_list(pin,page_num+1)order_info.extend(bill_info_sub)count_dir.update(count_dir_sub)returnorder_info,count_dirdefskuProResultPC(orderId,skuId,pin):"""判断订单是否保价超时"""url="https://sitepp-fm.jd.com/rest/webserver/skuProResultPC"data={"orderId":orderId,"skuId":skuId,"pin":pin}headers={'User-Agent':user_agent,'Referer':'https://pcsitepp-fm.jd.com/',}r=session.post(url,data=data,headers=headers)return'overTime'notinr.text

    样本结果

    python订单信息:[{'orderid':'118598307636','skuidAndSequence':['851267,1']},{'orderid':'118597642910','skuidAndSequence':['4389188,1']},{'orderid':'123625659522','skuidAndSequence':['69699954984,1']},{'orderid':'123539553604','skuidAndSequence':['6839875,1']},{'orderid':'123474129967','skuidAndSequence':['50000970588,1']}]商品数量{'118598307636_851267':'10','118597642910_4389188':'10','123625659522_69699954984':'1','123539553604_6839875':'4','123474129967_50000970588':'1','122842702447_31295640649':'1','117403228624_31295640649':'1'}

    # # # #商品信息

    在获取保险清单时,已获取货物的sku编号,以及货物的url(如:

    对元素的分析表明,在页面的js中,pageConfig变量包含了我们需要的所有数据,这些数据是通过正则表达式取出的

    pythondefget_product_info(skuId):"""获商品信息"""info={}url="http://item.jd.com/%s.html"%skuIdheaders={'User-Agent':user_agent,'Referer':'https://pcsitepp-fm.jd.com/',}r=requests.get(url,headers=headers)pageConfig=re.findall("varpageConfig=\\{([\\s\\S]+)\\}catch\\(e\\)\\{\\}",r.text)cat=re.findall("cat:\\[([\\d,]+)\\]",pageConfig[0])venderId=re.findall("venderId:(\\d+)",pageConfig[0])shopId=re.findall("shopId:'(\\d+)'",pageConfig[0])name=re.findall("name:'(.+)'",pageConfig[0])info['cat']=cat[0]iflen(cat)else""info['venderId']=venderId[0]iflen(venderId)else""info['shopId']=shopId[0]iflen(shopId)else""info['skuId']=skuId#配送区域默认为北京info['area']='1_72_55653_0'info['name']=name[0]returninfo

    样本结果

    python{'cat':'1319,1525,7057','venderId':'1000015389','shopId':'1000015389','skuId':'6839875','area':'1_72_55653_0','name':'雀氏chiaus薄c引力纸尿裤小号S27片(4-8kg)尿不湿新生儿柔薄透气'}{'cat':'1319,6313,15614','venderId':'10109166','shopId':'965779','skuId':'50000970588','area':'1_72_55653_0','name':'七彩博士婴儿定型枕0-1岁夏季透气天丝新生儿乳胶枕头宝宝U型枕新生儿用品绿色天丝枕'}{'cat':'1319,1527,1559','venderId':'107952','shopId':'106328','skuId':'31295640649','area':'1_72_55653_0','name':'babycare婴儿纸巾抽纸新生儿面巾纸云柔巾宝宝纸巾108抽*6包'}

    # # # #商品的当前价格

    获取商品信息后,将这些数据作为参数提交给url(

    pythondefget_product_price(product_info):url="https://c0.3.cn/stockskuId={}&area={}&venderId={}&buyNum=1&choseSuitSkuIds=&cat={}&extraParam={{%22originid%22:%221%22}}&fqsp=0&ch=1&callback=jQuery{}"\\.format(product_info['skuId'],product_info['area'],product_info['venderId'],product_info.get('cat',''),random.randint(1000000,9999999))headers={'User-Agent':user_agent,'Host':'c0.3.cn','Referer':'https://item.jd.com/{0}.html'.format(product_info['skuId']),}r=session.get(url,headers=headers)data=parse_json(r.text)#价格price=data.get("stock",{}).get("jdPrice",{}).get('p',0)returnfloat(price)

    商品优惠券

    在JD.COM购物,经常会有满xx减xx和满xx折扣的优惠券。当您在购买商品时不使用优惠券时,可以联系客服进行价格保护。在这里拿优惠券并打印出来

    pythondefget_product_coupon(product_info,price):"""优惠券列表"""result=[]headers={'User-Agent':user_agent,'Referer':'https://item.jd.com/{0}.html'.format(product_info['skuId']),}url='https://cd.jd.com/promotion/v2callback=jQuery{}&skuId={}&area={}&shopId={}&venderId={}&cat={}&isCanUseDQ=1&isCanUseJQ=1&platform=0&orgType=2&jdPrice={}&appid=1&_={}'\\.format(str(random.randint(1000000,9999999)),product_info['skuId'],product_info['area'],product_info['shopId'],product_info['venderId'],product_info['cat'].replace(',','%2C'),price,str(int(time.time()*1000)))r=session.get(url,headers=headers)data=parse_json(r.text)pickOneTag=data.get("prom",{}).get("pickOneTag")#满减ifpickOneTag:fortaginpickOneTag:result.append(tag.get('content'))#打折skuCoupon=data.get('skuCoupon')ifskuCoupon:forcouponinskuCoupon:ifcoupon.get('allDesc'):result.append(coupon.get('allDesc'))elifcoupon.get('quota')andcoupon.get('discount'):result.append("满"+str(coupon.get('quota'))+'减'+str(coupon.get('discount')))returnresult

    样本结果

    python['每满199元,可减100元现金,最多可减1000元','满3件,总价打5折','满105.0减5.0']

    # # # #订单价格

    这里已经得到了商品的当前价格、优惠券、购买数量,还需要得到剩余订单的订单价格,就是第一张图中的金额。我们使用订单号和sku号作为参数来批量查询订单价格

    pythondefget_price_list(pin):'''获取下单价格、商品信息、当前价格、数量'''product_list=[]#取订单号,sku和商品数量queryOrderPriceParam,count_dir=get_order_list(pin)#获取购买时的价格params={"queryOrderPriceParam":json.dumps(queryOrderPriceParam)}r=session.post("https://sitepp-fm.jd.com/rest/webserver/getOrderListSkuPrice",data=params)orderList=r.json()foriteminorderList:skuid=item.get("skuid")buyingjdprice=item.get("buyingjdprice")orderid=item.get("orderid")#商品信息product_info=get_product_info(skuid)#当前价格price=get_product_price(product_info)#优惠券coupon=get_product_coupon(product_info,price)name=product_info['name']count=count_dir[orderid+'_'+skuid]product_list.append({'orderid':orderid,'name':name,'price':price,'coupon':coupon,'count':count,'buyingjdprice':buyingjdprice})returnproduct_list

    样本结果

    [{'orderid':'','name':'雀氏chiaus薄c引力纸尿裤小号S27片(4-8kg)尿不湿新生儿柔薄透气','price':27.9,'coupon':['购买1件可优惠换购热销商品','满105.0减5.0','满199减50','满268减60'],'count':'4','buyingjdprice':27.0},{'orderid':'','name':'七彩博士婴儿定型枕0-1岁夏季透气天丝新生儿乳胶枕头宝宝U型枕新生儿用品绿色天丝枕','price':69.0,'coupon':['06月16日00:00该商品参加跨店铺满折活动,满2件,总价打8折;满3件,总价打7折','满98减5','满105.0减5.0','满178减10'],'count':'1','buyingjdprice':66.0}]

    # # # #申请价格保护

    最后一步是比价,申请价格保护。有两种情况,一种是可以不用优惠券直接申请价格保护,另一种是有优惠券可以打印到控制台通知用户。

    pythondefprotect_protect_apply(product_list):"""申请价格保护"""iflen(product_list)==0:returnelse:foriteminproduct_list:result='订单号:{},名称:{},数量:{},购买价格:{},当前价格:{},当前优惠:{}。'\\.format(item['orderid'],item['name'],item['count'],item['buyingjdprice'],item['price'],'|'.join(item['coupon']))#没有优惠券并且购买价格高于当前价格iflen(item['coupon'])==0anditem['buyingjdprice']>item['price']:url='https://pcsitepp-fm.jd.com//rest/pricepro/skuProtectApply'data={"orderId":item['orderId'],"orderCategory":"Others","skuId":item['skuId'],"refundtype":1}headers={'User-Agent':user_agent,'Referer':'https://pcsitepp-fm.jd.com/','accept':'application/json,text/javascript,*/*;q=0.01'}session.post(url,data=data,headers=headers)print(result+'已申请价格保护,请结果查看价格保护页面')eliflen(item['coupon'])>0:print(result+'在优惠券未申请自动价格保护,请联系客服申请')return

    样本结果

    订单号。:,名称:Chelsea chiaus薄C重力纸尿裤小号S27(4-8公斤),纸尿裤柔软、轻薄、透气,适合新生儿使用,起订量:4片,进价:27.0,现价:27.9,现价优惠:买1片热卖商品打折| 105.0以上减5.0 | 199以上减50 | 268以上减60。优惠券未申请自动价格保护,请联系客服申请

    订单号。:,名称:七彩博士婴儿造型枕0-1岁夏季透气天丝新生儿乳胶枕婴儿U型枕新生儿用品绿色天丝枕,起订量:1件,进价:66.0,现价:69.0,现价:6月16日00:00,本产品参加跨店全优惠活动,2件满,总价20折;超过3件,总价打八折|超过98减5|超过105.0减5.0|超过178减10。优惠券未申请自动价格保护,请联系客服申请

    ###总结

    JD.COM自动保价的脚本核心代码已经完成,可以根据自己的需要修改代码。比如添加预定任务,发送邮件而不是打印等等。

作者信息

python技术 [等级:3]
发布了 77 篇专栏 · 获得点赞 162 · 获得阅读 10543

相关推荐 更多