瑞数案例欧冶解读py和js文件最终版

py文件解读

首先文件先呈上

python 复制代码
import json
import time

import requests
from lxml import etree
from loguru import logger
import execjs

session = requests.Session()

headers = {
    "Accept": "*/*",
    "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Origin": "https://www.ouyeel.com",
    "Referer": "https://www.ouyeel.com/search-ng/queryResource/index",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36",
}

list_url = "https://www.ouyeel.com/search-ng/commoditySearch/queryCommodityResult"


def fetch_1(): # 用于获取ts,auto,env三件套! 同时也保存了cookie1,所以不用管cookie1
    response = session.post(list_url, headers=headers)
    tree = etree.HTML(response.text)
    meta_content = tree.xpath('//meta[2]/@content')[0]
    ts_js = tree.xpath('//script[1]/text()')[0]
    auto_script_url = 'https://www.ouyeel.com' + tree.xpath('//script[@src]/@src')[0]
    auto_script_js = session.get(auto_script_url).text

    return meta_content, ts_js, auto_script_js

def gen_cookie2(meta_content, ts_js, auto_script_js):
    with open("ouyeel.js", encoding='utf-8') as fp: # 这个js文件只有上节课补环境的部分,只缺三件套
        js_code = fp.read()
    js_code = js_code.replace("meta_content", meta_content).replace("'ts_js'", ts_js).replace("'auto_script_js'",
                                                                                              auto_script_js)
    js_compile = execjs.compile(js_code)
    js_cookie = js_compile.call("get_cookies")
    cookie_key_value = js_cookie.split(";")[0].split("=")
    session.cookies.update({cookie_key_value[0]: cookie_key_value[1]})


def fetch_2(page_index): # 填写第几页即可
    data = {
        "criteriaJson": '{"pageIndex":%d,"pageSize":50,"industryComponent":null,"channel":null,"productType":null,'
                        '"sort":null,"warehouseCode":null,"key_search":null,"is_central":null,"searchField":null,'
                        '"companyCode":null,"inquiryCategory":null,"inquirySpec":null,"provider":null,'
                        '"packCodes":null,"shopCode":null,"steelFactory":null,"resourceIds":null,"jsonParam":{},'
                        '"excludeShowSoldOut":null}' % page_index
    }
    response = session.post(list_url, headers=headers, data=data)
    logger.info(f"第{page_index}页产品列表: ", response, response.text)
    ret_list_str = response.json().get("resultList")
    ret_list = json.loads(ret_list_str)
    for item in ret_list:
        print(item)


def main():

    # for page in range(1,2):
        # (1) 发起第一次请求,获取cookie1以及源码三件套:meta_content, ts_js, auto_script_js
        meta_content, ts_js, auto_script_js = fetch_1()
        # print(session.cookies.get_dict())
        # (2) 基于源码三件套制作cookie2
        gen_cookie2(meta_content, ts_js, auto_script_js)
        # (3) 发起第二次请求,获取数据
        fetch_2(1)
        session.cookies.clear()
        time.sleep(1)


if __name__ == '__main__':
    main()

main方法追踪流程

获取三件套

替换js文件,将三件套写入同一个js文件中

相关推荐
Sarvartha14 小时前
final 关键字
java·开发语言
程序员Sunday15 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
zhangzeyuaaa16 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙16 小时前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
谢亮_vipxieliang17 小时前
用 PHP 构建轻量级 REST API:从路由到鉴权的完整实践
开发语言·后端·php
思无邪6617 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能
H.莓飛18 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
福兮说19 小时前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
零基础12319 小时前
Ubuntu 常用命令汇总
linux·运维·开发语言
外收内放19 小时前
Python基础语法练习题(57-58)
开发语言·python