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()