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

第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', '']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值