05-requests添加Cookies与正则表达式

news2024/10/5 19:09:42

第5讲 requests添加Cookies与正则表达式

整体课程知识点查看 :https://blog.csdn.net/j1451284189/article/details/128713764

本讲总结

request代理使用

request SSL

request添加Cookies

数据解析方法简介

数据解析:正则表达式讲解

一、requests 代理

def day5_requests_proxy():
    url = 'https://www.baidu.com/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
    }
    #添加免费代理
    free_proxy = {
        'http': '120.77.249.46:8080'
    }
    response = requests.get(url,headers=headers,proxies=free_proxy)
    print(response.status_code)

二、requests SSL

def day5_requests_ssl():
    url = 'http://www.icbc.com.cn/icbc/'
    # https需第三方证书认证  SSL
    # 12306是自己的证书
    # 解决方法:告诉web忽略证书,直接访问
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
    }
    # verify 忽略证书
    response = requests.get(url,headers=headers,verify=False)
    print(response.status_code)
    with open('baidu.html', 'w', encoding='utf-8') as f:
        f.write(response.content.decode())

三、requests Cookies

cookie字符串转字典

cookie 复制后是字符串,但

cookies = 'BAIDUID=9E7C2D060E38585B188986F0EF0CA99E:SL=0:NR=10:FG=1;BIDUPSID=314F6F32BDBB7DC43ED777384251421C;'

方法1:正则匹配 自己替换

替换 ;为\n
替换如图:

在这里插入图片描述

方法二:函数处理

cookie_dict = {}
cookie_list = cookies.split('; ')
for cookie in cookie_list:
	cookie_dict[cookie.split('=')[0]] = cookie.split('=')[1]

方法三:字典推导式

cookie_dict = {cookie.split('=')[0] : cookie.split('=')[1],for cookie in cookies.split('; ')}

携带Cookie访问权限信息

def day5_requests_cookies():
    url = '	https://www.baidu.com/my/index'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
    }
    #方法一:传参给cookies 需要的传参类型是字典
    # cookies = 'BAIDUID=9E7C2D060E38585B188986F0EF0CA99E:SL=0:NR=10:FG=1; BIDUPSID=314F6F32BDBB7DC43ED777384251421C; PSTM=1631362136'
    # cookie_dict = {cookie.split('=')[0] : cookie.split('=')[1] for cookie in cookies.split('; ')}
    # print(cookie_dict)
    # response = requests.get(url, headers=headers, cookies=cookie_dict)
    # with open('baidu.html', 'w', encoding='utf-8') as f:
    #     f.write(response.content.decode())

    # 方法二 传参给headers
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
        'Cookie':'BAIDUID=9E7C2D060E38585B188986F0EF0CA99E:SL=0:NR=10:FG=1; BIDUPSID=314F6F32BDBB7DC43ED777384251421C; PSTM=1631362136;'
    }
    response = requests.get(url, headers=headers)
    with open('baidu.html', 'w', encoding='utf-8') as f:
        f.write(response.content.decode())

自动登录获取Cookie

def day5_auto_login():
    #session 类似于cookiejar 自动保存cookie
    session = requests.session()
    url = 'https://www.zcbbe.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1'
    login_header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
        # 'Host':'bpoyg.zdzhiheng.com.cn:8000',
        # 'Origin':'http://bpoyg.zdzhiheng.com.cn:8000',
        # 'Referer':'http://bpoyg.zdzhiheng.com.cn:8000/login',
    }
    login_form_data = {
        "username": "jml",
        "password": "j*******",
        "quickforward": 'yes',
        "handlekey": 'ls',
    }
    # 登录操作,获得cookie
    response = session.post(url=url,headers=login_header,data=login_form_data)
    print(response.content)

    # 直接获取权限信息
    center_url = 'https://www.zcbbe.com/plugin.php?id=dc_vip&moblie=no&mobile=no'
    response = session.get(center_url,headers=login_header)
    with open('baidu.html', 'w', encoding='utf-8') as f:
        f.write(response.content.decode())

四、数据解析简介

正则

xpath

bs4

html

xml (json) 数据交互格式,字符串或字典

五、正则表达式

规则简介

字符含义
.匹配除换行符以外的任意字符
|A|B表示:匹配正则表达式条件A或B
^匹配字符串的开始(在集合[]里表示"非")的意思
$匹配字符串的结束
{n}重复n次
{,n}重复小于n次
{n,}重复n次或更多次
{n,m}重复n到m次
*重复零次或更多次,等价于{0,}
+重复一次或更多次,等价于{1,}
?重复零次或一次,等价于{0,1}
{n,m}?重复n到m次,但尽可能少重复
{n,}?重复n次以上,但尽可能少重复
*?重复任意次,但尽可能少重复
+?重复1次或更多次,但尽可能少重复
??重复0次或1次,但尽可能少重复
[…]字符类,匹配所包含的任意一个字符 注1 : 连字符-如果出现在字符串中同表示字符范围描述(A-Z);如果如果出现在首位则仅作为普通字符 注2 : 特殊字符仅有反斜线保持特殊含义 .用于转义字符. 其它特殊字符如*,+,?,等均作为普通字符匹配 注3 : 脱字符^如果出现在首位则表示匹配不包含其中的任意字符;如栗出现在字符串中间就仅作为普通字符匹配
[^x]匹配除了x以外的任意字符
[^aou]匹配除了aou这几个字母以外的任意字符如 f,g,h
\1.将一个普通字符变成特殊字符,例知:\d表示匹配所有十进制数字 2.解除元字符的特殊功能,例.崇示匹配点号本身 3.引用序号对应的子组所匹配的字符串 4.详见下方列举
举例:匹配2.4 2\.4
\序号1.引用序号对应的子组所匹配的字符串,子组的序号从1开始计算 2.如果序号是以0开头,或者3个数字的长度度。那么不会被用于引用对应的子组,而是用于匹配八进制数字所表示的ASCII码值对应的字符
\A匹配输入字符串的开始位置
\Z匹配输入字符串的结束位置
\b匹配单词的开始或结束
\B匹配不是单词开头或结束的位置
\d匹配数字
\D匹配任意非数字的字符
\s匹配任意的空白符
\S匹配任意不是空白符的字符如:1,* ,)
\w匹配字母或数字或下划线或汉字
\W匹配任意不是字母,数字,下划线,汉字的字符,如 +,-,*

示例

def day5_re_findall():
    # 贪婪模式 从开头匹配到结尾
    example_str = """addddnmaaam2252.5
                    999n9999mN
                    """
    # *贪婪模式   *?非贪婪
    # pattern = re.compile('a(.*)m')  # 贪婪 ['dddddmaaa']
    # pattern = re.compile('a(.*?)m') #  非贪婪['ddddd', 'aa']

    # 转义字符  \ 匹配 2.5
    # pattern = re.compile('2.5') # ['225', '2.5']
    # pattern = re.compile('2\.5') # ['2.5']

    # 匹配除了换行符之外的所有  .
    # pattern = re.compile('a(.*)n',re.I)  # 忽略大小写 ['dddd']
    # pattern = re.compile('a(.*)n',re.S)  # 忽略换行 ['ddddnmaaam2252.5\n        999']
    # pattern = re.compile('a(.*)n',re.I|re.S)  # 忽略大小写 且忽略换行 ['ddddnmaaam2252.5\n        999n9999m']
	
	#中括号的使用 
	example_str = '2239982'
    pattern = re.compile('[123]') # ['2', '2', '3', '2']
    pattern = re.compile('[7-9]') # ['9', '9', '8']
    
    # findall 方法  结果是列表
    result = pattern.findall(example_str)
    print(result)

优先级

函数

# match 从头开始匹配 匹配一次
# search 从任意位置匹配 匹配一次
# findall 查找符合正则的内容
# sub 替换
# split 分割

def day5_re_fun_show():
    example_str = 'abc123'
    pattern = re.compile('\d+')

    # match 从头开始匹配 匹配一次
    result = pattern.match(example_str) # None
    # search 从任意位置匹配 匹配一次
    result = pattern.search(example_str)  # match='123'
    # findall 查找符合正则的内容
    result = pattern.findall(example_str)  # ['123']
    # sub 替换
    result = pattern.sub('@',example_str) #  abc@
    # split 分割
    result = pattern.split(example_str) # ['abc', '']

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/170009.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【23种设计模式】学习汇总(未完结+思维导图)

获取思维导图翻至底部底部,基本概览博客内容(暂未完全完善,期待你的持续关注) 写作不易,如果您觉得写的不错,欢迎给博主来一波点赞、收藏~让博主更有动力吧! 一.相关内容 在软件工程中&#xf…

关系型数据库RDBMS | 字节青训营笔记

一、经典案例 1、红包雨案例 每年春节,抖音都会有红包雨获得 2、事务 事务(Transaction): 是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性 BEGIN; UPDATE account table SET balance balance - 小目标 WHERE name “抖音; UPDATE…

指数加权平均、动量梯度下降法

目录1.指数加权平均(exponentially weighted averages)这里有一年的温度数据。如果想计算温度的趋势,也就是局部平均值(local average),或者说移动平均值(moving average),怎么做?:当天的温度,:…

交换机的基本原理(特别是动态ARP、静态ARP、代理ARP)

第六章:交换机的基本配置 二层交换设备工作在OSI模型的第二层,即数据链路层,它对数据包的转发是建立在MAC(Media Access Control )地址基础之上的。二层交换设备不同的接口发送和接收数据独立,各接口属于不…

esxi宿主机进入维护模式虚拟机不会自动释放【不会自动迁移出去】解决方法、查看辨别宿主机本地空间和存储池、esxi进入存储内部清理空间

文章目录说明虚拟机不自动释放处理过程报错说明宿主机进入维护模式说明手动迁移报错说明直接启动虚拟机报错说明解决方法报错原因分析解决方法查看辨别宿主机本地空间esxi进入存储内部清理空间进入存储池内存储内部空间清理及原则存储空间说明说明 我当前的esxi主机版本为5.5 …

7亿人养活的眼镜行业,容不下一家县城小店

文|螳螂观察 作者| 青月 如果要盘点那些被暴利眷顾的行业,眼镜零售肯定榜上有名。 从上市企业的财报数据来看,国内眼镜零售行业的首家上市公司——博士眼镜,2021年前三季度的平均毛利率超过60%;国内镜片第一股明月眼镜在2021年…

【C进阶】文件操作

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C语言进阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们…

小程序应用生命周期

小程序应用生命周期生命周期介绍应用生命周期钩子函数参数对象页面生命周期页面生命周期-页面参数组件生命周期生命周期介绍 定义 一个组件或者页面生老病死的过程一堆会在特定时期触发的函数 分类 应用生命周期页面生命周期组件生命周期 应用生命周期钩子函数 属性说明onL…

Xpath Helper 在新版Edge中的安装及解决快捷键冲突问题

🤵‍♂️ 个人主页老虎也淘气 个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏…

vue2源码分析-keep-alive组件

简介 keep-alive是Vue.js的一个内置组件。它能够将指定的组件实例保存在内存中,而不是直接将其销毁,它是一个抽象组件,不会被渲染到真实DOM中,也不会出现在父组件链中。 具体用法咱们这里就不再细说了,今天主要是探讨…

JavaEE day2 初识web与HTML

初步了解相关知识 关于端口(port):一个端口同一时间只能被一个进程监听,但是一个进程可以监听多个端口 URL的标准格式:协议名称://主机/资源路径?查询字符串#文档片段 一般协议最常见的为htt…

Java基础之《netty(25)—handler链调用机制》

一、netty的handler的调用机制 1、使用自定义的编码器和解码器来说明netty的handler调用机制。 客户端发送long -> 服务器 服务端发送long -> 客户端 2、案例 二、客户端发送给服务端 1、服务端 NettyServer.java package netty.inboundhandlerAndOutboundhandler;i…

【C++】从0到1入门C++编程学习笔记 - 基础入门篇:程序流程结构

文章目录一、选择结构1.1 if 语句1.2 三目运算符1.3 switch语句二、循环结构2.1 while 循环语句2.2 do...while 循环语句2.3 for 循环语句2.4 嵌套循环三、跳转语句3.1 break 语句3.2 continue 语句3.3 goto 语句C/C支持最基本的三种程序运行结构:顺序结构、选择结构…

MySQL进阶——优化

1、选择最合适的字段属性 Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快。因此,在创建表的时候,为了获得更好的性能,我们…

腾讯云HiFlow场景连接器 联动对象存储企业网盘,打通数据分发“最后一公里”

对云厂商和企业用户来说,随着数据规模的快速增长,企业除了对存储功能和性能的要求不断增加,也越来越注重数据分发的效率。在传统数据分发的过程中,数据管理员往往需要先在存储桶下载对应的客户方案/交付资料,再使用微信…

LINUX软中断-softirq

前言 关于linux的软中断的文章,在网上可以找到很多,但总觉着讲的都不够深入,打算自己写一下 软中断的感性认识 中断一旦被触发,本地cpu正在运行的不管是什么程序都要让路,让中断程序执行并且执行过程中不能被打断。…

分布式事务问题

4.2 分布式事务问题 4.2.1 什么是分布式事务 一次课程发布操作需要向数据库、redis、elasticsearch、MinIO写四份数据,这里存在分布式事务问题。 什么是分布式事务? 首先理解什么是本地事务? 平常我们在程序中通过spring去控制事务是利用…

Linux---进程优先级

目录 基本概念 查看系统进程 PRI and NI 用top命令更改已存在进程的nice: 其他概念 基本概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很…

JNPF 3.4.5 快速开发框架源码目录截图 Gitee代码托管和研发协作平台

Gitee Gitee 除了提供最基础的 Git 代码托管之外,还提供代码在线查看、历史版本查看、Fork、Pull Request、打包下载任意版本、Issue、Wiki 、保护分支、代码质量检测、PaaS项目演示等方便管理、开发、协作、共享的功能。 作为一个应用项目,一般会有一…

flink环境参数引起的错误

环境参数:flink使用的版本是1.13.5、CentOS Linux 8一,默认环境引起本地与集群的jar包冲突遇到的情况是在idea执行的时候是没有问题的,然后打成jar包用集群执行的时候就会遇到问题。报错的时候会不太一,总之顺着错误去找的话会找到…