您的位置:首页 > 编程语言 > Python开发

【python爬虫专题】解析方法 <2> Requests库方法总结

2018-01-29 16:42 736 查看
Requests库是python实现的简单易用的HTTP库

请求

基本的GET请求:requests.get()

写一个实例:

import requests

response  = requests.get("http://www.baidu.com")
print(type(response))
print(response.status_code)
print(response.text)
print(type(response.text))


其中,response.text 和urllib中的 .read()方法效果是一样的

各种请求方法

常见的HTTP请求的方法如: get post put delete 等,都可以直观的调用同名的方法就可以,如:

import requests
url = '....'
requests.get(url)
requests.post(url)
requests.put(url)
requests.delete(url)
requests.head(url)
requests.options(url)


关于这几种方法的区别,可以参考网上许多博文资料:

HTTP POST GET 本质区别详解

GET,POST,PUT,DELETE的区别

http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法

GET请求

最简单的请求就是

import requests
url = '…………'
response = requests.get(url)
print(response.text)


如果我们要使用带有参数的GET请求的话,具有两种方式:

把传入的参数(通常是key-value型)拼接到url中,格式: url?key1=value1&key2=value2

(推荐)命名一个参数对象(字典),然后把这
4000
个对象传入requests.get()方法中的params 参数中,举个例子:

import requests
url = "..."
data = {
"key1":"value1"
"key2":"value2"
}
response = requests.get(url,params=data)
print(response.text)


解析json

当我们的get请求返回的是一个json字符串,那么我们通过import json ,调用json方法可以把json字符串变成json格式的数据

import requests
import json

url = "..."
response = requests.get(url)# 假如说返回一个json字符串
print(response.json())
print(json.loads(response.text))


  其实上面代码中,最后两行出来的结果是一样的,这里仅仅做一个”科普“。这两个方法在解析Ajex请求的时候是比较常用的。

获取一些二进制数据(图片,视频等等)

  下载图片、视频是使用爬虫最常见的目的之一。这些都是二进制数据,在获取二进制数据的时候,我们可以调用content()方法获得二进制内容 .

  

import requests
url = '...'# 这个url是保存某张图片或视频的url
response = requests.get(url)
print(response.text) # 不出意外,这将打印一堆“乱码”
print(response.content)# 将会打印出一堆二进制数据流bytes


对于获得的二进制数据,只有我们保存下来才会得到我们想要的图片、视频,保存数据的方法就比较简单:

with open("path/file_name",'wb') as f:
f.write(response.content)
f.close()


这样就可以顺利的保存下我们想要的二进制资源了。

给请求添加headers

如果不给我们的请求添加headers,我们可能会被网站管理者禁掉,或者出现服务器错误。例如像这样:

500 Server Error

An internal server error occured.

添加headers的方法也很简单,直接在get()方法中传入headers就可以了,不过多累述

基本的POST请求

既然是POST那就必然要传入一些数据,直接传入dict 类型的form-data就可以。

import requests
data = {"key1":"value1","key2":"value2"}
headers = {"User-Agent":"....."}
response = requests.post("url",data=data,headers=headers)
print(response.json())


response属性

response属性常见的包括status_code, headers, cookies, url, history,可以自己尝试调用这些方法来实践。

一些高级操作

文件上传操作:

  文件上传则需要用到post方法,这里可以使用post方法中传入files参数,实现文件的上传。注意这里的files参数是一个字典。

  比方说上传一张图片的话,已知本地图片的路径path和要上传的网站url:

 

import requests
files = {"files":open('path':‘rb’)}
response = requests.post(url,files=files)


获取cookies

import requests
response = requests.get(url)
print(response.cookies)# 有可能返回的是一个cookieJar类型的cookie列表,我们可以用for循环打印出来
for key,value in response.cookies.item():
print(key + ' = ' + value)


  这样我们就可以直观的获得我们想要的所有cookies,这样的方法比urllib容易多了,不用设置什么opener,什么handler之类的。

  有了cookies,我们就可以利用它进行会话维持,模拟登陆。(常用Session()方法)

证书验证

  我们在requests请求一个网站时,如果网站是一个HTTPS协议的话

,程序将默认首先检测证书是否合法,当证书不合法时,将会抛出一个SSLError。

  

我们可以给get()方法中的verify参数设置为False`

import requests
# from requests.packages import urllib3
# urllib3.disable_warnings()
response = requests.get(url,verify=False)
print(response.status_code)


这样就可以避免SSL验证错误了,不过程序会报一个warning,告诉你没有验证,这里去除第二、三行的注释号‘#’ ,可以排除这个warning。

  在get() 方法中还有一个cert参数,可以传递本地的证书文件,一般我们非网站开发不会用到。

设置代理

用requests库设置代理也很容易,直接创建一个dict然后作proxies参数传入get()方法就可以了。

import requests
proxies={'http':'http://代理IP号码',
'https':'https://代理IP号码'
}
response = requests.get(url,proxies=proxies)


如果代理是socks代理,那么我们需要安装requests.socks模块,然后像上述代码一样类似设置就可以啦

proxies={'http':'socks5://代理IP号码',
'https':'socks5://代理IP号码'
}


设置超时

用来限制服务应答的速度。直接设置get方法里面的timeout参数就好。

认证设置

遇到要登录验证的网站,则可以利用auth参数进行登录验证,传入登录用户名,密码。

import requests
from requests.auth import HTTPBasicAuth

r = requests.get(url,auth = HTTPBasicAuth('用户名',‘密码’))
print(r.status_code)


也可以直接输入auth参数进行设置

错误与异常

在requests库中,常见的错误主要有 HTTPError, ConnectionError, readtimeout 等,在这里要想在try - except 中捕获异常进行处理也是相当便捷的,这里附上其官方文档的链接,方便需要时查看:

Requests库官方文档链接入口
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  爬虫 requests