python爬虫requests库的高级应用

文件上传

把需要上传的文件通过 files 参数,然后携带文件发送请求

一般写法:

        files = {'files': open('上传的文件名', 'rb')}
        resp = requests.post('https://httpbin.org/post', files=files)

import requests

files = {'files': open('1.text', 'rb')}
resp = requests.post('https://httpbin.org/post', files=files)
print(resp.text)

Cookie获取、设置

cookie可以用来维持登录状态

获取网页的cookie

通过cookies属性,可以获取页面的cookie

import requests

resp = requests.get('https://www.baidu.com')
print(resp.cookies)
for key, value in resp.cookies.items():
    print(key + '=' + value)
设置cookie

设置cookie的方法有两种,一种是直接将网页的cookie添加到请求头中,通过headers参数向网页发送请求;一种是通过cookies参数向网页发送请求。

1、直接复制cookie值,以键值对的形式添加到headers参数中

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)....",
    'Cookie': 'BAIDUID=7C1B56C85D92FFC26681B66817B37D4D:FG=1; BAIDUID_BFESS=7C1B56C85D92FFC26681B66817B37D4D:FG=1; PSTM=1687362461; BIDUPSID=B47427019F13580BC08AE710C98EA314; ZFY=dHy5zoIfPGw:AdedYRmnLDtrVqRTAL723n2xriYWOwrk:C; H_PS_PSSID=39636_39648_39670_39664_39686_39677_39712_39730_39765; BD_UPN=12314753; BA_HECTOR=2001240l2la181a4a4a0a1am1ilerfd1q.....'
}
resp = requests.get('https://www.baidu.com', headers=headers)
print(resp.text)
2、通过cookies参数携带cookie发送请求
import requests
import requests.cookies

cookies = 'BAIDUID=7C1B56C85D92FFC26681B66817B37D4D:FG=1; BAIDUID_BFESS=7C1B56C85D92FFC26681B66817B37D4D:FG=1; PSTM=1687362461; BIDUPSID=B47427019F13580BC08AE710C98EA314; ZFY=dHy5zoIfPGw:AdedYRmnLDtrVqRTAL723n2xriYWOwrk:C; H_PS_PSSID=39636_39648_39670_39664_39686_39677_39712_39730_39765; BD_UPN=12314753; BA_HECTOR=2001240l2la181a4a4a0a1am1ilerfd1q'
jar = requests.cookies.RequestsCookieJar()
for cookie in cookies.split(';'):
    key, value = cookie.split('=', 1)
    jar.set(key, value)
resp = requests.get('https://www.baidu.com', cookies=jar)
print(resp.text)

 通过cookies参数设置cookie时

1、需要将网页cookie复制下来;

2、创建requests.cookies.RequestsCookieJar()对象;

3、以  ;(分号)进行遍历cookies,利用 split() 方法进行分割

4、利用set()方法设置每个cookie条目,通过requests库的cookies参数将cookie发送出去

Session维持

session是会话的意思,当浏览的页面需要一直保持登录状态时,可以使用session保持登录的状态,而不需每一次请求页面都需要携带cookie发送请求。

import requests

# 将cooie转化为cookiejar对象
cookies = 'BAIDUID=7C1B56C85D92FFC26681B66817B37D4D:FG=1; BAIDUID_BFESS=7C1B56C85D92FFC26681B66817B37D4D:FG=1; PSTM=1687362461; BIDUPSID=B47427019F13580BC08AE710C98EA314; ZFY=dHy5zoIfPGw:AdedYRmnLDtrVqRTAL723n2xriYWOwrk:C; H_PS_PSSID=39636_39648_39670_39664_39686_39677_39712_39730_39765; BD_UPN=12314753; BA_HECTOR=2001240l2la181a4a4a0a1am1ilerfd1q; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598'
jar = requests.cookies.RequestsCookieJar()
for cookie in cookies.split(';'):
    key, value = cookie.split('=', 1)
    jar.set(key, value)

# 1、创建session对象
session = requests.Session()
# 2、通过session的cookie属性进行设置cookie值
session.cookies.update(jar)
# 3、通过session发送请求
resp = session.get('https://www.baidu.com')
print(resp.text)
print(resp.cookies)
session设置cookie的方法
  1、创建session对象
  2、通过session的cookie属性进行设置cookie值
  3、通过session发送请求

超时设置

为防止服务器不能及时响应,可以设置超时时间,当超过这个时间没有收到响应时,就会报错

import requests

# 超时设置
resp = requests.get('https://www.httpbin.org/get', timeout=1)
print(resp.status_code)


请求分为两个阶段:连接和读取

timeout单独传入一个数时,指的是连接和读取的总和;也可以传入一个元组,单独设置连接和读取的时间,还可以将它设置为none,此时将不会返回超时错误

import requests

# 超时设置
resp = requests.get('https://www.httpbin.org/get', timeout=(5, 30))
print(resp.status_code)

ssl认证

当遇到提示ssl证书错误提示时,可以设置verify的值为false,忽略ssl证书验证;也可以指定本地证书用作客户端证书,可以是单个文件(包含密钥和证书)或者是一个包含两个文件路径的元组,需要注意的是本地私有的证书的key必须是解密状态的

设置verify参数为false,请求将不再验证证书是否有效

import requests
from requests.packages import urllib3

# 通过urllib3忽略警告
urllib3.disable_warnings()

# 设置verify参数为false,忽略证书验证
resp = requests.get('https://ssr2.scrape.center/', verify=False)
print(resp.status_code)

代理设置

某些网站刚开始测试请求时,都可以正常进行获取内容,当大规模进行爬取时,可能会弹出验证、封锁IP地址等问题,导致无法获取想要的内容,所以我们需要使用proxies参数,设置代理IP,防止网站对爬虫的封锁。

import requests

# 代理设置
proxies = {
    "http": "http://123.182.59.227",
    "https": "http://123.182.59.227"
}

resp = requests.get('https://www.httpbin.oeg/get', proxies=proxies)
print(resp.status_code)

 设置代理的一般格式:

        proxies = {
            "http": "http://ip",
           "https": "http://ip"
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值