«

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,来解决中文乱码

  1. response.content.decode() 默认utf-8
  2. response.content.decode("GBK")
  3. 常见的编码字符串
    • utf-8
    • gbk
    • gb2312
    • ascii(读音:阿斯克码)
    • iso-8859-1

response响应对象的其它常用属性或方法

在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代理)等:

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)

标签: 爬虫