requests 库
什么是requests
官方文档:http://cn.python-requests.org/zh_CN/latest
requests 是 urllib的一个封装
优点:
- 简单易用
- url自动转义
- 支持python2 python3 ,而且名字一样,无缝对接
下面我们来使用一下
首先 安装requests库,pip install requests
这里说一下,如果安装不成功,需要切换一下国内源,相关切换国内源请看python——pip国那源这个还是切换一下好,以后都方便
好,话不多说,我来直观的感受一下,request的简单易用
先演示一下如何获取响应头、请求头、响应状态码以及cookie
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
class RequestSpider(object):
def __init__(self):
url = 'http://www.baidu.com/'
self.response = requests.get(url, headers=headers)
def run(self):
data = self.response.content
# 1.获取请求头
request_headers = self.response.request.headers
print(request_headers)
# 2.获取响应头
response_headers = self.response.headers
print(response_headers)
# 3.获取相应状态码
code = self.response.status_code
print(code)
# 4.获取请求的cookie
request_cookie = self.response.request._cookies
print(request_cookie)
# 如果cookie啥都没有没关系,因为有的网站没有给cookie,百度这个好像有
# 5.获取响应的cookie
response_cookie = self.response.cookies
print(response_cookie)
RequestSpider().run()
requests 的 get
-
响应对象:
request.get(url,headers=headers,params=data)
-
字符串形式查看相应
r.text
-
字节类型查看响应
r.conten
-
查看或者设置编码类型:
r.encodin
-
查看请求的url
r.url
-
查看响应头部
r.headers
-
查看状态码
r.status_code
-
查看json格式数据:
r.json()
import requests
url = 'http://baidu.com/'
# 定制头部
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
r = requests.get(url,headers=headers)
print(r) r是一个响应对象
print(r.encoding) 查看网页编码
r.encoding = 'utf8'
# 也可以用来修改编码为 utf-8
print(r.text)# 这个是字符串类型
# r.content 字节类
还是get,带参数的get
import requests
# 带参数的get请求
url = 'https://www.baidu.com/s'
data = {
'ie': 'utf-8',
'wd': '中国'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
r = requests.get(url, headers=headers, params=data)
# 自动编码传参,还记的urllib的时候,我们需要自己编码然后传递,这个就十分方便
print(r.url)
# with open('baidu.html', 'wb') as f:
# f.write(r.content)
# 想写入文件看看的可以写入
post请求
post 于 get 大体相同,只是传参的时候不是给params,而是传给 data
还记的当时我们爬取百度翻译吗,这次我们来爬bing翻译,
详细的就不说了,和上次抓包的过程完全一样,如果有不清楚的请看百度翻译抓取,这里就只放一张图
下面看代码
import requests
# bing 翻译 可以更换formdata中text 的值来查询其他的单词
url = 'https://cn.bing.com/tlookupv3?isVertical=1&&IG=A7EE06275ABF44B6A8DD8CBA094AED1C&IID=translator.5028.3'
formdata = {
'from': 'en',
'to': 'zh-Hans',
'text': 'lion'
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
# formdata传入后自动编码,不需要我们再urllib.pares.urlencode()
r = requests.post(url, data=formdata, headers=headers)
print(r.text) # 也可以 print(r.json()) 这两个看到的是一样的,
# 不过,json()会直接将字符串转化为字典,
如果之前看了百度翻译抓取的朋友,一定会发现,这次代码简单了些
同样返回了json数据,去解码看看吧
今天我们学了 requsets 的一些基本用法, 看了一些 post 和 get 请求用requests 的 请求方法,明天我们会接着学习 有关 requests 的 代理,ssl认证和cookie
我又来要赞了,如果觉得 可以学到些什么的话,点个赞再走吧,欢迎各位路过的大佬评论指正