requests库是一个常用的用于http请求的模块,它运用python语言编写,能够方便的对网页进行爬取,是学习python爬虫的较好的http请求模块。
1、requests模块的安装
WIN+R——cmd——pip install requests就可。
倘若遇到read timeout(拜访超时)的问题,可参考链接文案:you-get介绍及python怎样利用you-get工具进行网页视频的爬取?中you-get工具借用豆瓣代理的下载安装方式。
2、requests模块的运用办法
2.1 requests库的几个重点办法:
(1)requests.get()
这个办法是咱们平时最常用的办法之一,经过这个办法咱们能够认识到其他的办法,因此咱们仔细介绍这个办法。 详细参数是: r=requests.get(url,params,**kwargs)url: 必须爬取的网站位置。params: 翻译过来便是参数, url中的额外参数,字典或字节流格式,可选。**kwargs : 12个掌控拜访的参数params:字典或字节序列, 做为参数增多到url中,运用这个参数能够把有些键值对以?key1=value1&key2=value2的模式增多到url中 例如:kw= {key1: values, key2: values} r = requests.get(http:www.python123.io/ws, params=kw)
a.发送无参数的get请求:
b.发送带参数的get请求:
以上得知,咱们的get参数是以params关键字参数传递的。
另外,还能够传递一个list给一个请求参数:
以上便是get请求的基本形式。
**kwargs有以下的参数: data:字典,字节序或文件对象,重点做为向服务器供给或提交资源是提交,,做为requests的内容,与params区别的是,data提交的数据并不放在url链接里, 而是放在url链接对应位置的地区做为数据来存储。它亦能够接受一个字符串对象。json:json格式的数据, json合适在关联的html,http关联的web研发中非常平常, 亦是http最经常运用的数据格式, 他是做为内容部分能够向服务器提交。 例如:kv = {key1: value1} r = requests.post(http://python123.io/ws, json=kv)headers:字典是http的关联语,对应了向某个url拜访时所发起的http的头i字段, 能够用这个字段来定义http的拜访的http头,能够用来模拟任何咱们想模拟的浏览器来对url发起拜访。 例子: hd = {user-agent: Chrome/10} r = requests.post(http://python123.io/ws, headers=hd)cookies:字典或CookieJar,指的是从http中解析cookieauth:元组,用来支持http认证功能files:字典, 是用来向服务器传输文件时运用的字段。 例子:fs = {files: open(data.txt, rb)} r = requests.post(http://python123.io/ws, files=fs)timeout: 用于设定超时时间, 单位为秒,当发起一个get请求时能够设置一个timeout时间, 倘若在timeout时间内请求内容无返回, 将产生一个timeout的反常。proxies:字典, 用来设置拜访代理服务器。allow_redirects: 开关, 暗示是不是准许对url进行重定向, 默认为True。stream: 开关, 指是不是对获取内容进行立即下载, 默认为True。verify:开关, 用于认证SSL证书, 默认为True。cert: 用于设置保留本地SSL证书路径其中response(即:r)对象有以下属性:
咱们能够单击桌面左下角的WIN按钮,找到python安装包,打开IDLE来亲自操作熟练response的属性。
requests库的反常
重视requests库有时会产生反常,例如网络连接错误、http错误反常、重定向反常、请求url超时反常等等。因此咱们必须判断r.status_codes是不是是200,在这儿咱们怎么样去捉捕异常呢?
这儿咱们能够利用r.raise_for_status() 语句去捉捕反常,该语句在办法内部判断r.status_code是不是等于200,倘若不等于,则抛出反常。
于是在这儿咱们有一个爬取网页的通用代码框架:
此处不可采用return来返回输出,运用的话会报错,由于:return只能用在自定义函数中。
(2) request.head()
看代码:
(3)requests.post()
1、向url post一个字典:
2、向url post 一个字符串,自动编码为data >>> import requests
>>> r=requests.post("http://httpbin.org/post",data="hello python")
>>> print(r.text)
{
"args": {},
"data": "hello python",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "12",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5e510c68-12ee4eec533847d89a06d184"
},
"json": null,
"origin": "36.47.128.206",
"url": "http://httpbin.org/post"
}3.向url post一个文件 >>> import requests
>>> files = {filespen(C:\\Users\\Think\\Desktop\\test_requests\\test.txt,rb)}
>>> r = requests.post(https://httpbin.org/post,files=files)
>>> print(r.text)
{
"args":{
},
"data":"",
"files":{
"files":"hello worle!"
},
"form":{
},
"headers":{
"Accept":"*/*",
"Accept-Encoding":"gzip, deflate",
"Connection":"close",
"Content-Length":"158",
"Content-Type":"multipart/form-data; boundary=d2fb307f28aeb57b932d867f80f2f600",
"Host":"httpbin.org",
"User-Agent":"python-requests/2.19.1"
},
"json":null,
"origin":"113.65.2.187",
"url":"https://httpbin.org/post"
以上得知,post请求参数是以data关键字参数来传递的。
(5)requests.put()
看代码: >>> payload={"key1":"value1","key2":"value2"}
>>> r=requests.put("http://httpbin.org/put",data=payload)
>>> print(r.text)
{
"args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
},
"json": null,
"origin": "218.197.153.150",
"url": "http://httpbin.org/put"
(6)requests.patch()
requests.patch和request.put类似。 两者区别的是: 当咱们用patch时仅必须提交必须修改的字段。 而用put时,必要将20个字段一块提交到url,未提交字段将会被删除。 patch的好处是:节省网络带宽。
(7)requests.request()
requests.request()支持其他所有的办法。 requests.request(method,url,**kwargs) method: “GET”、”HEAD”、”POST”、”PUT”、”PATCH”等等url: 请求的网址**kwargs: 掌控拜访的参数
|