requests模块介绍
时间:2023-2-27 23:46 作者:wen 分类: Python
requests模块的作用
发送HTTP请求,获取响应数据
安装
pip install requests
发送请求
import requests
# 目标
url = "https://baidu.com/s?"
# 向目标url发送get请求,带header参数
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"}
params = {"wd":"python"}
response = requests.get(url, headers=headers,params=params)
# 打印响应内容
# 类型:str; requests模块自动根据HTTP头部对响应的编码作出有根据的推测,推测的文本编码
# print(response.text)
# 类型:bytes;是存储的bytes类型的响应源码,可以进行decode()操作
# print(response.content)
print(response.content.decode())
# 写入文件
with open('baidu.html','wb+') as f:
f.write(response.content)
# 常见响应对象的属性和方法
# 响应url
print(response.url)
# 响应状态码
print(response.status_code)
# 响应对应的请求头
print(response.request.headers)
# 响应头
print(response.headers)
# cookie
print(response.cookies)
可以通过对response.content进行decode,来解决中文乱码
- response.content.decode() 默认utf-8
- response.content.decode("GBK")
- 常见的编码字符串
- utf-8
- gbk
- gb2312
- ascii(读音:阿斯克码)
- iso-8859-1
response响应对象的其它常用属性或方法
- response.url 响应的URL;有时候响应的URL和请求的URL并不一致
- response.status_code 响应状态码
- response.request.headers 响应对象的请求头
- response.headers 响应头
- response.request._cookies 响应对象请求的cookie;放回cookieJar类型
- response.cookies 响应的cookie(经过了set-cookie动作;返回cookieJar类型
- response.json() 自动将json字符串类型的响应内容转换为python对象(dict or list)
在header传递cookie参数和User-Agent
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0",
"Cookie":"_ga=GA1.2.580222817.1638111356; _gid=GA1.2.1270897251.1638111356"}
要想发送你的cookies到服务器,可以使用 cookies 参数:
>>> url = 'http://httpbin.org/cookies'
>>> cookies = dict(cookies_are='working')
>>> r = requests.get(url, cookies=cookies)
>>> r.text
{"cookies": {"cookies_are": "working"}}
Cookie 的返回对象为 RequestsCookieJar,它的行为和字典类似,但接口更为完整,适合跨域名跨路径使用。你还可以把 Cookie Jar 传到 Requests 中:
>>> jar = requests.cookies.RequestsCookieJar()
>>> jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies')
>>> jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere')
>>> url = 'http://httpbin.org/cookies'
>>> r = requests.get(url, cookies=jar)
>>> r.text
{"cookies": {"tasty_cookie": "yum"}}
超时
你可以告诉 requests 在经过以 timeout 参数设定的秒数时间之后停止等待响应。基本上所有的生产代码都应该使用这一参数。如果不使用,你的程序可能会永远失去响应:
>>> requests.get('http://github.com', timeout=0.001)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
requests.exceptions.Timeout: HTTPConnectionPool(host='github.com', port=80): Request timed out. (timeout=0.001)
代理
代理是一个ip,指向的是一个代理服务器,作用是转发请求
分类:正向代理和反向代理,知不知道服务器地址作为判断标准,知道是正向代理,不知道是反向代理
代理分为:
透明代理:虽然可以直接“隐藏”你的IP地址,但是还是可以查到你是谁,目标服务器接受到的请求头如下
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Your IP
匿名代理:别人只能知道你用了代理,无法知道你是谁,目标服务器接受到的请求头如下
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Proxy IP
高匿代理:别人根本无法发现你是在用代理,所以是最好的选择,毫无疑问使用高匿代理效果最好,目标服务器接受到的请求头如下
REMOTE_ADDR = Proxy IP
HTTP_VIA = not determined
HTTP_X_FORWARDED_FOR = not determined
根据网站所使用的协议不同,需要使用相应协议的代理服务,从代理服务请求使用的协议可以分为:
http代理:目标url为HTTP协议
https代理:目标url为https协议
socks隧道代理(例如socks5代理)等:
- socks 代理只是简单的传递数据包,不关心是何种应用协议(FTP,HTTP和HTTPS等)。
- socks 代理比HTTP和HTTPS代理耗时少
- socks 代理可以转发HTTP和HTTPS请求
proxies代理参数的使用
proxies = {
"http":"http://12.34.56.79:9527",
"https":"http://12.34.56.79:9527"
}
respone = requests.get(url,proxies=proxies)
使用verify参数忽略CA证书
response = requests.get(url, headers=headers,params=params,proxies=proxies,verify=False)
requests模块发送post请求
data = {'a':1,"b":2}
response = requests.post(url,data)
利用requests.session进行状态保持
session = requests.session()
response = session.get(url, headers=headers,params=params,proxies=proxies,verify=False)
response = session.post(url, headers=headers,params=params,proxies=proxies,verify=False)
标签: 爬虫