Python 官方文档:入门教程 => 点击学习
对于某些网站,大规模频繁请求,网站可能会弹出验证码,或者跳转到登陆认证页面,甚至可能会被直接封客户端ip,导致短时间内无法访问,这个时候就需要用到代理ip。requests是能解决这个问题的,需要用到proxies参数,示例如下:impor
对于某些网站,大规模频繁请求,网站可能会弹出验证码,或者跳转到登陆认证页面,甚至可能会被直接封客户端ip,导致短时间内无法访问,这个时候就需要用到代理ip。
requests是能解决这个问题的,需要用到proxies参数,示例如下:
import requests
proxies = {
"Http": 'http://123.123.123.10:5566',
"https": 'https://123.123.123.10:443',
}
requests.get("https://www.baidu.com", proxies=proxies)
上面代理地址换成有效代理地址即可
验证代理配置
import requests
proxies = {
"http": 'http://user:passWord@123.123.123.10:5566/',
}
requests.get("https://www.baidu.com", proxies=proxies)
requests还支持socks协议的代理
需要安装socks这个库
pip3 install 'requests[socks]'
示例代码:
import requests
proxies = {
"http": 'socks5://user:password@123.123.123.10:5566/',
"https": 'socks5://user:password@123.123.123.10:5566/',
}
requests.get("https://www.baidu.com", proxies=proxies)
requests超时设置
在本机网络状况不好或服务器网络响应太慢甚至无法响应的时候,应该设置一个超时时间,需要用到timeout参数。
将超时时间设置为0.1秒,如果0.1秒内没有响应,就会抛出异常。
import requests
r = requests.get('https://www.alibaba.com', timeout=0.1)
print(r.status_code)
返回信息:
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='www.alibaba.com', port=443): Read timed out. (read timeout=0.1)
实际上,请求分为两个阶段,即连接(connect)和读取(read)。设置的timeout将作用于连接和读取这两个的timeout总和,也可以分别指定,传入一个元组:
import requests
r = requests.get('https://www.alibaba.com', timeout=(1, 1))
print(r.status_code)
如果想永久等待,可以将timeout设置为None,或者不设置直接留空,默认为None,如果服务器响应很慢,就慢慢等待,不会返回超时错误,用法如下:
import requests
r = requests.get('https://www.alibaba.com', timeout=None)
print(r.status_code)
r1 = requests.get('https://www.alibaba.com')
print(r1.status_code)
requests登陆验证(身份认证)
在访问网站时,可能会遇到认证页面,此时可以使用requests自带的身份认证功能,示例:
import requests
from requests.auth import HTTPBasicAuth
r = requests.get('http://localhost:5000', auth=HTTPBasicAuth('username', 'password'))
print(r.status_code)
# 默认使用HTTPBasicAuth这个类来认证
r1 = requests.get('http://localhost:5000', auth=('username', 'password'))
print(r1.status_code)
此外,requests还提供了其他认证方式,OAuth认证,此时需要安装oauth包
pip3 install requests_oauthlib
示例代码:
import requests
from requests_oauthlib import OAuth1
url = 'https://api.twitter.com/1.1/account/verify_credentials.JSON'
auth = OAuth1('your_app_key', 'your_app_secret', 'your_oauth_token', 'user_oauth_token_secret')
requests.get(url, auth=auth)
Prepared Requests
可以将请求表示为数据结构,其中各个参数都可以通过一个Request对象来表示,这个数据结构就叫Prepared Requests。
示例:
from requests import Request, Session
url = 'http://httpbin.org/post'
data = {
'name': 'zhangsan',
'age': '22',
}
headers = {
'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWEBKit/537.36 (Khtml, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
s = Session()
req = Request('POST', url=url, data=data, headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)
返回信息:
引入了Request,用url,data,headers参数构造了一个Request对象,需要再调用Seesion的prepare_request()方法将其转换为一个Prepared Requests对象,然后用send()方法发送即可,可以看到同样达到了POST请求效果。
有了Request这个对象,就可以将请求当作独立的对象来看待,这样在进行队列调度时会非常方便。
--结束END--
本文标题: requests-代理设置,超时设置,登陆验证,Prepared Requests
本文链接: https://lsjlt.com/news/180769.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0