文 | 某某白米饭
来源:Python 技术「ID: pythonall」
大家在 618 一定买了很多东西,而有些商家喜欢偷偷摸摸降价让我们觉得瞬间亏了一个亿。今天就撸一个京东的自动保价脚本。
获取保价列表
首先需要登录京东,这个在 《618!京东PC版抢卷》上写过了,是使用二维码登录的,大家可以看看。
打开京东保价页面(https://pcsitepp-fm.jd.com/),需要获取到下图红框中的元素,有名称,数量,购买价格。
按 F12 获取下页面元素
先把全局的变量放在前面
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
session = requests.session()
下面的代码获取可以保价的订单列表包含订单号和商品的 sku 号和数量,有 3 个函数,get_pin() 函数获取 PIN 值,get_order_list() 函数循环获取订单列表,skuProResultPC() 函数判断这个订单是否超了保价时间
def get_pin():
"""获取 PIN,用正则表达式从页面中取出"""
url = "https://pcsitepp-fm.jd.com/"
r = session.get(url)
loginPin = re.findall('<input type="hidden" id="loginPin" value="(\w+)" />', r.text)
pin = loginPin[0] if len(loginPin) > 0 else None
return pin
def get_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('<tr class="sep-row"><td colspan="6"></td></tr>')
orders.pop(0)
for item in orders:
# 订单号
orderid = re.findall("订单号:(\d+)", item)
# 数量
count = re.findall('<span class="count">\n([\sx\d]+)</span>',item)
# 商品的 sku和序号
skuidAndSequences = re.findall("queryOrderSkuPriceParam\.skuidAndSequence\.push\(\"(\d+\,\d+)\"\)\;", item)
newSkuidAndSequences = []
# 商品的sku和订单商品的序号
for ss in skuidAndSequences:
# 判断订单保价是否超时
if skuProResultPC(orderid[0], ss.split(',')[0], pin):
newSkuidAndSequences.append(ss)
if orderid[0] == '117403228624':
print(orderid[0])
count_ss = count_html[int(ss.split(',')[1]) - 1]
cou