

在使用关键词搜索采集淘宝数据时,很显然,数据是经过加密处理的。至于如何寻找接口并进行分析,网上有很详细的教程,感兴趣的可以点击** 这里 **查看。
虽然网上教程众多,但似乎很少有可以直接使用的代码。因此,这里直接提供自己编写的代码,方便大家直接复制粘贴使用。

在进行加密接口的逆向分析时,需要以下参数:
代码已经进行了简化处理,只需提供以下必要参数即可:
只需要安装requests库,影刀调用模块运行就行。
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
import hashlib
import json
import requests
import re
import time
#curl转请求头
def curl_headers(curl_str):
# 初始化headers字典
headers = {}
# 分割curl字符串为行
lines = curl_str.strip().split('\n')
# 解析headers
for line in lines[1:]:
line = line.strip()
if line.startswith('-H'):
# 提取header键值对
header = line[4:-1] # 去掉 -H ' 和最后的 '
if ':' in header:
key, value = header.split(':', 1)
headers[key.strip()] = value.strip()
elif line.startswith('-b'):
# 提取cookie
cookie = line[4:-1] # 去掉 -b ' 和最后的 '
headers['cookie'] = cookie.strip()
# 转换为json字符串,去掉多余的引号
return json.dumps(headers, indent=4, ensure_ascii=False).replace("'", "")
def http(curl,keyword,page,sort,startPrice,endPrice):
#获取请求头
headers = curl_headers(curl)
pattern = r'_m_h5_tk=([a-f0-9]{32})'
match = re.search(pattern, headers)
em_token = match.group(1)
eS = '12574478' #固定值
eE = int(time.time()*1000) #毫秒时间戳
data = {
"appId": "34385",
"params": {
"page": page, # 页码
"q": keyword, # 关键词
"sort": sort, # 综合排序:_coefp 销量:_sale 价格高-低:_bid 价格低-高:bid
"start_price": startPrice, # 最低价格
"end_price": endPrice, # 最高价格
"startPrice": startPrice,
"endPrice": endPrice,
"n": 48,
"device": "HMA-AL00",
"isBeta": "false",
"grayHair": "false",
"from": "nt_history",
"brand": "HUAWEI",
"info": "wifi",
"index": "4",
"rainbow": "",
"schemaType": "auction",
"elderHome": "false",
"isEnterSrpSearch": "true",
"newSearch": "false",
"network": "wifi",
"subtype": "",
"hasPreposeFilter": "false",
"prepositionVersion": "v2",
"client_os": "Android",
"gpsEnabled": "false",
"searchDoorFrom": "srp",
"debug_rerankNewOpenCard": "false",
"homePageVersion": "v7",
"searchElderHomeOpen": "false",
"search_action": "initiative",
"sugg": "_4_1",
"sversion": "13.6",
"style": "list",
"ttid": "600000@taobao_pc_10.7.0",
"needTabs": "true",
"areaCode": "CN",
"vm": "nw",
"countryNum": "156",
"m": "pc",
"qSource": "url",
"pageSource": "a21bo.jianhua/a.201856.d13", # 页面来源路径
"tab": "all",
"pageSize": 48,
"totalPage": 100, # 总页数
"totalResults": 4800,
"sourceS": "0",
"bcoffset": "",
"ntoffset": "",
"filterTag": "",
"service": "",
"prop": "",
"loc": "",
"itemIds": None,
"p4pIds": None,
"p4pS": None,
"categoryp": "",
"ha3Kvpairs": None,
"myCNA": "2tL/Hm7Tmn8BASQOBH0pjN5M"
}
}
#计算sign
params_str = json.dumps(data['params']).replace('"', '\\"') #转义
ep_data_str = f'{{"appId":"{data["appId"]}","params":"{params_str}"}}' #构造参与sign计算的json字符串
string = em_token + "&" + str(eE) + "&" + eS + "&" + ep_data_str #加密
MD5 = hashlib.md5()
MD5.update(string.encode('utf-8'))
sign = MD5.hexdigest()
params = {
'jsv': '2.7.4',
'appKey': str(eS),
't': str(eE),
'sign': sign,
'api': 'mtop.relationrecommend.wirelessrecommend.recommend',
'v': '2.0',
'timeout': '10000',
'type': 'jsonp',
'dataType': 'jsonp',
'callback': 'mtopjsonp5',
'data': ep_data_str
}
url = 'https://h5api.m.taobao.com/h5/mtop.relationrecommend.wirelessrecommend.recommend/2.0/'
response = requests.get(url= url, params=params,headers=json.loads(headers)).text
# 将请求数据转成json格式
match = re.search(r'mtopjsonp\d+\((.*)\)', response)
json_data = json.loads(match.group(1))
status = json_data['ret']
print("关键词:",keyword," ","页数:",page," ","状态:",status," ","签名结果:", sign)
if "调用成功" in ', '.join(status):
# 提取数据
all_data = []
json_lists = json_data['data']['itemsArray']
for s in json_lists:
try:
sku = s['umpPriceLog']['s_id']
except Exception as e:
sku = ""
标题 = re.sub(r'<span[^>]*>.*?</span>', '', s['title'])
价格 = s['price']
销量 = s['realSales']
地点 = s['procity']
链接 = "https:" + s['auctionURL']
商品详情 = [sku,标题,价格,销量,地点,链接]
all_data.append(商品详情)
return all_data
else:
""代码运行会有三种结果:

