Python 爬后台订单

Python 爬后台订单

  • 接口加密
  • pandas 的简单数据统计分析
  • excel的数据写入
  • pyecharts 作图报表
  • 结合了多进程请求网络,缩短了时长

这个里面有一个加密的,接口请求每次都带了加密,查看js代码后可破解

pandas数据分析真是快,数据分析利器

这里就直接上代码了,比较简短,先在浏览器中登入,拿到网站cookies,复制使用给请求头每次带上就可以拿取后台数据了

这里拿数据存在一个没有值的情况,用的get方法,取到没有key的值不会报错,比较方便,另外defaultdict,可以直接设置默认值,更方便
import requests
import json
import time
import hashlib
# import numpy as np
import xlsxwriter
from PIL import Image

from pyecharts.charts import Bar, Line, Page
from pyecharts import options as opts
from pyecharts.globals import ThemeType

import types
import multiprocessing as mp
import imghdr
from copy import deepcopy

# 内置主题类型可查看 pyecharts.globals.ThemeType
# import calendar
# import datetime
import pandas as pd

from datetime import datetime, timedelta


from io import BytesIO
try:
    from urllib.request import urlopen
except ImportError:
    from urllib2 import urlopen

import os
os.makedirs('../malljson/', exist_ok=True)
os.makedirs('../orders/', exist_ok=True)

name = 'mall.json'
filename='../malljson/' + name

workbookName = '../orders/'+name[0:-5]+time.strftime("%Y%m%d",time.localtime())+'_order.xlsx'
anworkbookName='../orders/'+name[0:-5]+time.strftime("%Y%m%d",time.localtime())+'_order_static.xlsx'

infodict={}
with open(filename, "r", encoding="UTF-8") as f:
    infodict = json.load(f)
    print("%s文件读取成功"%(filename))

# print(infodict)
print(workbookName)
print(anworkbookName)	

# print(infodict['cookies'])

headers={
 'Accept':'''application/json, text/plain, */*''',
 'Origin':'''http://mall.yingerfashion.com''',
 'Host': 'zone.yingerfashion.com',
 "Accept-Encoding": "gzip, deflate, br",
 "Accept-Language": "zh-CN,zh;q=0.9",
 "Connection": "keep-alive",
 'Referer':'https://zone.yingerfashion.com/mobile/index',
 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
 'X-XSRF-TOKEN':'eyJpdiI6Ik1GdjFBWVMyTjNsMGV4cytvS1JUTWc9PSIsInZhbHVlIjoiVUNjeDRNWFNQUTJhYnNUM0txdVpjQXllN3VITU5WTDFBXC9nbVRRcitNYUwyR2ZoYmpsNVJiUlp2WldTSEdBNmwiLCJtYWMiOiIxNjdjMjhjYmQzNzE1MWFiZTE0YzNlYjJiNjkyYTJjZGZmNmQ0ODdlNDdiYjE1Yzg3MDk4MWZmOTMwZjQyYTlmIn0='
};

gn=0;


def jsonSort(jsonObj):

	str1 = '';
	arr = sorted(jsonObj)
	for item in arr:
		str1+=item+str(jsonObj[item])
	return str1

def auth_get(params):


	form = {
      "timestamp": int(time.time()),
      "appkey": "uBl1NH9nERTAs2dU"
    };
    
	secret="qhEk7jfEYB9FiDIglvLyUvcG5D1KHUDFFuuQ7SKw"

	params.update(form)
	strdata = jsonSort(params) + secret

	sign=hashlib.md5(strdata.encode('utf-8')).hexdigest()
	sign = sign.upper()
	params['sign'] = sign
	return params

def login(username, password='123456'):
	url = 'https://zone.yingerfashion.com/api/wap/login'

	params={
	"key":"",
	"password":password,
	"username":username,
	"vcode":""
	}

	params = auth_get(params)

	s = requests.Session()
	res = s.post(url, data=params, headers=headers)
	# cookies = requests.utils.dict_from_cookiejar(s.cookies)

	# print(json.loads(res.text))
	cookies = s.cookies
	print(cookies)
	print(res.headers)

	form = {
  	"url":"https://zone.yingerfashion.com/mobile/index",
	};
	# print(cookies.get(''))
	url='https://zone.yingerfashion.com/api/mobile/WeiXin/ecstoreSendJsSdk'
	r = s.post(url, params = auth_get(form), verify = True)
	print(r.json())


	# return;
	url = 'https://zone.yingerfashion.com/api/wap/auth?'

	res = s.get(url, params=auth_get(dict()))
	print(res.text)
	# url = 'https://zone.yingerfashion.com/api/pc/used_store_order'
# 'Bearer ' + window.localStorage.getItem('pa_token');
    # }
	# params = auth_get(form)

def getOrder(pages, startPage=1):
	url = 'https://zone.yingerfashion.com/api/pc/used_store_order'
#
	orders=[]
	form = {
  	"orderGroup":"pay",
	"page":1,
	"limit":10,
	};
	s = requests.Session()
	# headers['Cookie'] = infodict['cookies']
	headers['Authorization'] = infodict["Authorization"]

	n=0
	for j in range(0, pages):
		# print(j)
		n+=10
		form['page'] = j + startPage
		r = s.get(url, params = auth_get(form), headers = headers, verify = True)
	# print(json.loads(r.text))
		ret = json.loads(r.text)
		data = ret.get('data',[])
		for order in data:
			orders.append(order['order_id'])
		if len(data)<=0:
			print(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值