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(