【Python】京東商品價格監控
阿新 • • 發佈:2017-05-25
ets amp inpu text init clas bject logs while
import requests,json,re,winsound,time class Stock(object): def __init__(self): self.province_dict={value:key for key,value in { 1:‘北京‘,2:‘上海‘,3:‘天津‘,4:‘重慶‘,5:‘河北‘,6:‘山西‘,7:‘河南‘,8:‘遼寧‘,9:‘吉林‘,10:‘黑龍江‘, 11:‘內蒙古‘,12:‘江蘇‘,13:‘山東‘,14:‘安徽‘,15:‘浙江‘,16:‘福建‘,17:‘湖北‘,18:‘湖南‘,19:‘廣東‘,20:‘廣西‘, 21:‘江西‘,22:‘四川‘,23:‘海南‘,24:‘貴州‘,25:‘雲南‘,26:‘西藏‘,27:‘陜西‘,28:‘甘肅‘,29:‘青海‘,30:‘寧夏‘, 31:‘新疆‘,32:‘臺灣‘,84:‘釣魚島‘,52993:‘港澳‘ }.items()} self.price_dict={ ‘PC端‘:‘https://p.3.cn/prices/get?type=1&skuid=J_{}‘, ‘APP端‘:‘https://pm.3.cn/prices/mgets?origin=2&skuIds={}‘, ‘微信端‘:‘https://pe.3.cn/prices/mgets?origin=5&skuids={}‘, ‘QQ端‘:‘https://pe.3.cn/prices/mgets?origin=4&skuids={}‘ } self.set_skuId() def set_skuId(self): self.skuId=input(‘請輸入商品ID:‘) r=requests.get(‘http://item.jd.com/{}.html‘.format(self.skuId)).text cer=re.compile(‘<title>(.*)</title>‘,flags=0) self.skuName=cer.findall(r) if not self.skuName: print(‘您輸入的商品ID有誤!‘) return self.set_skuId() else: print(self.skuName[0]) def get_price(self): for key,value in self.price_dict.items(): #print(value.format(self.skuId)) r=json.loads(requests.get(value.format(self.skuId)).text)[0][‘p‘] print(key,r) def get_stock(self): provinceName=input(‘請輸入要查詢的省份(如福建):‘) if provinceName in self.province_dict.keys(): r=json.loads(requests.get(‘https://c0.3.cn/stock?skuId={skuId}&cat=1316,1385,1408&area={province}_2805_2855‘.format(skuId=self.skuId,province=str(self.province_dict[provinceName]))+‘&extraParam={%22originid%22:%221%22}‘).text) print(format(skuId=self.skuId,province=str(self.province_dict[provinceName]))) print(r[‘stock‘][‘area‘][‘provinceName‘],‘:‘,r[‘stock‘][‘StockStateName‘]) if r[‘stock‘][‘StockStateName‘]==‘無貨‘: flag=input(‘商品暫時無貨,是否循環監控?y/n:‘) if flag==‘y‘: while True: r=json.loads(requests.get(‘https://c0.3.cn/stock?skuId={skuId}&cat=1316,1385,1408&area={province}_2805_2855‘.format(skuId=self.skuId,province=str(self.province_dict[provinceName]))+‘&extraParam={%22originid%22:%221%22}‘).text) print(r[‘stock‘][‘area‘][‘provinceName‘],‘:‘,r[‘stock‘][‘StockStateName‘]) if r[‘stock‘][‘StockStateName‘]==‘現貨‘: for i in range(4): winsound.Beep(800,250) print(r[‘stock‘][‘area‘][‘provinceName‘],‘:‘,r[‘stock‘][‘StockStateName‘]) time.sleep(1) time.sleep(0.3) winsound.Beep(1600,500) break time.sleep(5) else: print(‘您的輸入有誤,請重新輸入!‘) return self.get_stock() if __name__==‘__main__‘: s=Stock() s.get_price() s.get_stock()
【Python】京東商品價格監控