requests模块简介
用于发送请求、获取响应,有很多替代模块,比如urllib,但requests代码简洁易懂
requests在底层实际上封装了urllib
requests模块的文档
1. 安装模块(省略)
2. response响应对象
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
# <class 'str'>
print(type(response.text))
# 打印源码
print(response.text)
源码中有乱码的情况
response.text是requests模块按照chardet模块推测出的编码字符集进行编码的结果,所以输出中会有乱码
response.text = response.content.decode(‘推测的编码字符集’)
网络中,字符串以bytes类型传输,response.content是bytes类型的响应源码
response.content解决中文乱码问题
打印二进制源码
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
# 打印二进制源码
print(response.content)
- encoding改一下编码就不会出现乱码
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
# ISO-8859-1 是推测的编码字符集
print(response.encoding)
response.encoding = 'utf8'
print(response.text)
- content.decode() 和**content.decode(‘GBK’)**也能解决乱码问题
decode默认’utf8’
decode()中还可选:gb2312,ascii,iso-8859-1
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
# content能解码
print(response.content.decode())
response.content 和 response.text
- 类型不同
- content没有指定解码类型,text的解码类型由requests模块推测
3. response响应对象的其他常用属性/方法
- response.text
- response.content
- response.url
响应的url,请求的url不一定返回响应,有可能重定向 - reponse.status_code
状态码 - response.request.headers
响应对象对应的请求的请求头(不是响应头) - response.headers
响应头 - response.request._cookies
响应对应的请求的cookies,返回cookieJar类型 - response.cookies
响应的cookie(经过了Set-cookie动作,返回CookieJar类型) - requests.json()
自动将json字符串类型的响应内容转换为Python对象(dict或list)
import requests
url = 'http://www.baidu.com'
response = requests.get(url)
print(response.request.headers)
print(response.headers)
print(response.request._cookies)
print(response.cookies)
注意请求头的User-Agent,很容易被识别为爬虫
Cookie中的BDORZ是需要特别注意的