首页 > 编程语言 >python脚本打包与请求带session的区别

python脚本打包与请求带session的区别

时间:2023-04-21 13:01:05浏览次数:40  
标签:get python -- session cookie sec requests 打包

pyinstaller -F -i D:\ico\123.ico  XXX.py --key 123456

如何防止exe被反编译呢

只需在打包命令后面加上--key命令即可,例如文章开头的命令可以更换为:

pyinstaller -Fw --icon=h.ico auto_organize_gui.py --add-data="h.ico;/" --key 123456

123456是你用来加密的密钥,可以随意更换。

该加密参数依赖tinyaes,可以通过以下命令安装:

pip install tinyaes

使用session,与不带session对比

import requests
import pandas as pd
import re
from time import sleep
import os

os.environ['NO_PROXY'] = 'www.baidu.com'


def get_info(pages, session=None):
    total_list = []
    for page in range(1, pages + 1):
        print("正在获取%d页" % page)
        # for page in pages:

        headers = {
            'authority': 'go.drugbank.com',
            'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
            'cache-control': 'no-cache',
            'cookie': 'cf_clearance=z8jXLY4NjL4.KVOUbgZNPWj6NPBlT_u.x4xmS19uZZE-1682037487-0-250; _ga=GA1.1.1772772602.1682037506; _clck=qmfr9z|1|fay|0; _gcl_au=1.1.154779136.1682037508; ln_or=eyIyNDI4NDg0IjoiZCJ9; cf_chl_rc_i=3; __hstc=49600953.15b5c265b1847afab42a7def948ef734.1682037569169.1682037569169.1682037569169.1; hubspotutk=15b5c265b1847afab42a7def948ef734; __hssrc=1; __hssc=49600953.1.1682037569170; _omx_drug_bank_session=h5rNQehFjtC7SdQpb0HXfv7YA4pMfk2aMTWYUSzMaI7nF0SbDXVfqfqjVPMDQTs2hgXfMvwxMUByy%2BKdrPb40gDq3sAu%2BlSnJlbkcvWaBL7%2FIXcG6c2pOsEpbjbnGW8MV%2FkzX9dBeVriL%2F%2Fu%2FqTFEy3yXHyFPH38kRTSlMsmGlhgEh4CixxpIMBRiVUNeT7y6DeBVsL%2BNsjwWPFsiDVkWI7a3jOWuyeBxRDUZ9wUC8Opi%2FAiuvt2uVIehjQ2v4MNPGh%2FeyHirey%2FXQB34RHcTcb1fSRyNfDm4HEGYVzHI%2FkI%2BwIx8yHe24IlAFsEVVMW08bZrMA4b7Xf8G%2FLYLW2uRIr9qtlwELL7f07%2BoGtFMGnwylLzS97w0dEETEjdhyCogDlU65RZNcfbQMykTItXTWUBUskVMiNqDqDL%2BWU--uvjh%2BEo9E6nxj%2FdW--jEPCVVPyedUcF9oOBkYjpA%3D%3D; _ga_DDLJ7EEV9M=GS1.1.1682037506.1.1.1682037593.0.0.0; _clsk=1mtfaxl|1682037594214|5|1|u.clarity.ms/collect',
            'pragma': 'no-cache',
            'referer': 'https://go.xxxx',
            'sec-ch-ua': '"Chromium";v="112", "Microsoft Edge";v="112", "Not:A-Brand";v="99"',
            'sec-ch-ua-mobile': '?0',
            'sec-ch-ua-platform': '"Windows"',
            'sec-fetch-dest': 'document',
            'sec-fetch-mode': 'navigate',
            'sec-fetch-site': 'same-origin',
            'sec-fetch-user': '?1',
            'upgrade-insecure-requests': '1',
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48',
        }

        params = {
            'page': str(page),
            'query': '*',
            'searcher': 'indications'
        }

        response = session.get('https://go.xxxx',
                               headers=headers, params=params).text
        try:
            info1 = re.findall(r'href="/indications/.*?">(.*?)</a', response)  # 第一列表
        except Exception as e:
            print(f"最大限度{page}页")
            return
        # print(info1)
        # print(len(info1))
        info2 = re.findall(r'<div class="db-matches"><a (.*?)</a></div>', response)
        info2_new = []  # 第二列表
        for i in info2:
            i = i.replace('href="/drugs/', '').replace('">', ':').replace('</a>', '').replace('<a', '')
            # print(i)
            info2_new.append(i)
        print(len(info1), info1)
        print(len(info2_new), info2_new)

        # 写入excel中
        for yaoming, chenfen in zip(info1, info2_new):
            dic = {
                "药名": yaoming,
                "成分": chenfen
            }
            total_list.append(dic)
        pf = pd.DataFrame(total_list)  # 转列表为DataFrame
        path = pd.ExcelWriter(f'test.xlsx')  # 设置保存路径
        pf.to_excel(path, encoding='utf-8', index=False)  # 转化为Excel
        path.save()  # 保存
        # -----------

        with open('记录.text', 'a', encoding='utf-8') as f:
            f.write(f'{len(info1), info1}\n{len(info2_new), info2_new}\n')
        sleep(1.5)


def starta():
    title = 'Displaying indications开始启动'
    width = 140
    print('#' * width)
    print('##', " " * (width - 6), '##')
    print('##', " " * (width - 6), '##')
    print('##', title.center(width - len(title) * 2 + 4), '##')
    print('##', " " * (width - 6), '##')
    print('##', " " * (width - 6), '##')
    print('#' * width)


def ends():
    print("爬取完成")


def main():
    session = requests.session()
    while True:
        starta()
        yeshu = int(input('一共获取页数:'))
        get_info(pages=yeshu, session=session)
        ends()
        # sleep(3)
        # os.system('cls')


if __name__ == '__main__':
    main()
    

场景如下:

session对象和requests两种方法发送的请求的区别:
1、场景
登陆某商城
查询我的订单数据
2、业务代码分析
首先这里涉及到两个接口,一个“登陆接口”,另外一个是“查询订单”的接口。
常规操作是我们 通过调用登陆接口 来获取响应的 cookie信息。
然后拿这个 cookie信息作为下一次请求的参数(cookie带有当前登陆人的信息)来请求 查询订单的接口

常规代码:

# 以下代码纯为了举例,没有效果的伪代码
import requests
# 登陆接口
response1 = requests.get(url_login,params,headers)
# 获取cookies信息
cookies = response.cookies
# 得到的cookies 是一个字典类型
cookie = cookies.get("cookies的key")
# 请求 查询接口
response2 = requests.get(search_url,params,headers,cookies=cookie)
# 查看查询响应的结果
response2.json()

使用session后:

# 以下代码纯为了举例,没有效果的伪代码
import requests
# 获取 session对象
session = requests.session()
# 登陆接口
response1 = session.get(url_login,params,headers)
# 请求 查询接口
response2 = session.get(search_url,params,headers)
# 查看查询响应的结果
response2.json()

  1. 通过代码的对比可发现使用session对象效率会更好,不用每次都将cookie信息放到请求内容中了
  2. session对象能够自动获取到cookie并且可以在下一次请求红自动带上我们所得到的的cookie信息,不用人为的去填写

标签:get,python,--,session,cookie,sec,requests,打包
From: https://www.cnblogs.com/code3/p/17339969.html

相关文章

  • 【THM】Python for Pentesters(使用Python辅助渗透测试)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/pythonforcybersecurity本文相关内容:Python可能是网络安全领域使用最广泛、最方便的脚本语言,本文涵盖了一些Python脚本示例,包括哈希破解、键盘记录、枚举和扫描等。简介Python可以成为你的武器库中的强大工具,因为......
  • Python学习(2)-NumPy矩阵与通用函数
    1.NumPy矩阵1.1mat函数mat=asmatrixasmatrix(data,dtype=None):data:表示输入的数组或者字符串,使用‘,’分割列,使用‘;’分割行创建两个普通的矩阵:print(np.mat([1,2,3]))print(np.mat("1,2,3;4,5,6;7,8,9"))--------[[123]][[123][456][789]]需要注意:mat创建的......
  • Python下使用串口发送十六进制数据
    importserialfromtimeimportsleepdefrecv(serial):whileTrue:data=serial.read_all()ifdata=='':continueelse:breaksleep(0.2)returndataif__name__=='__main_......
  • Python无框架分布式爬虫,爬取范例:拼多多商品详情数据,拼多多商品列表数据
    拼多多是中国领先的社交电商平台之一,是一家以“团购+折扣”为主要运营模式的电商平台。该平台上有海量的商品,对于商家和消费者来说都具有非常大的价值,因此,拼多多商品数据的采集技术非常重要。本文将介绍拼多多商品数据的采集技术。一、拼多多商品的数据结构拼多多的商品数据包含了......
  • python_数据分析与挖掘实战_词云
    #-*-coding:utf-8-*-#代码12-1评论去重的代码importpandasaspdimportreimportjieba.possegaspsgimportnumpyasnp#去重,去除完全重复的数据reviews=pd.read_csv("../../data/0404/reviews.csv")reviews=reviews[['content','content_ty......
  • vue3打包后一片空白控制台报错
    问题原因是路径不对,加上一行代码就可完美解决问题。在vue.config文件中加上  publicPath:'./' 即可解决问题。问题如图所示: 如何解决问题呢?     ......
  • Python | isinstance函数的使用
    isinstance是一个Python内置函数,用于检查一个对象是否是指定类或其子类的实例。isinstance(obj,cls)返回一个布尔值,表示obj是否是cls或其子类的实例。类似type()。isinstance()与type()区别:type()不会认为子类是一种父类类型,不考虑继承关系。isinstance()会认......
  • uiautomator2+python-模拟安卓键盘输入
    这种方法通常用于不知道控件的情况下的输入。第一步需要切换输入法,然后发送adb广播命令,具体使用方法如下d.set_fastinput_ime(True)先清除掉文本框的内容d.press("back")为收起键盘,可能存在键盘阻挡住别的页面元素,需要收起键盘d=u2.connect()d.set_fastinput_ime(Tr......
  • 一篇文章带你搞懂Python中的继承和多态
    今日鸡汤岩溜喷空晴似雨,林萝碍日夏多寒。一、继承的介绍继承是一种创建新的类的方式,新创建的叫子类,继承的叫父类、超类、基类。继承的特点就是子类可以使用父类的属性(特征、技能)。继承是类与类之间的关系。继承可以减少代码冗余、提高重用性。在现实生活中,继承一般指的是子女继承父......
  • 手把手教你用Python操纵Word自动编写离职报告
    今日鸡汤不堪玄鬓影,来对白头吟。前言大家好,我是吴老板,今天给大家分享一篇Python自动化文章。Python是自动化处理的一把好手,比如自动编写离职申请!!!安装pipinstallpython-docx-ihttps://pypi.douban.com/simple/基本用法创建一个docx文档fromdocximportDocumentfromdocx.enu......