瑞数案例欧冶解读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文件中

相关推荐
萌动的小火苗30 分钟前
1、python基础面试题
java·开发语言·python
运维行者_39 分钟前
网络监控与ITSM集成:从告警到工单,实现运维自动化闭环
开发语言·网络·分布式·后端·架构·flask·php
文艺理科生1 小时前
LangChain.js-v1-记忆管理最佳实践
前端·javascript·后端
小叮当爱咖啡1 小时前
Day3.参数+Prompt三板斧
开发语言·python·prompt
菜冻鱼1 小时前
Python-pandas-索引与筛选
开发语言·笔记·python·numpy·pandas·学习方法
zyplayer-doc2 小时前
同一份制度别复制到多个知识库:用zyplayer-doc引用文档解决重复维护
javascript·人工智能·智能手机·开源·ocr
鹿角片ljp2 小时前
Java面试复盘(二):String不可变、字符串常量池与字符串拼接
开发语言·python
小秋求学记.2 小时前
PHP安全漏洞实战:从环境配置到RCE攻击
开发语言·php
看浪的路人3 小时前
第3讲:代码补全引擎
开发语言·windows·python
小小龙学IT3 小时前
Day 26-27 项目实战:从零构建一个高并发聊天室(epoll + 线程池)
linux·服务器·c语言·开发语言·网络