reuqests库中有很多便捷的方法,比如以GET方式获得网页,在requests库中就是方法get(),上代码
import requests r = requests.get(‘https://www.baidu.com‘) print(type(r)) print(r.status_code) print(type(r.text)) print(r.text) print(r.cookies)
相当于urlopen的方法,得到一个Response对象,然后分别输出他的类型,状态码,相应体的类型,内容以及Cookies
requests还有许多的方法比如post,put,delete,head,options等分别表示其请求
由于HTTP中最常见的就是GET请求,因此下面用其来构建一个GET请求实例:
- 基本实例
import requests data = { ‘name‘:‘germey‘, ‘age‘:‘22‘ } #也可以不用创建data字典,直接把网址后面加上“?name=germey&age=22"但这样明显麻烦很多 r = requests.get(‘http://httpbin.org/get‘,params = data) print(r.text) #网页返回的是str类型,JSON格式的,我们可以用json方法将JSON格式的字符串转化为字典print(r.json()) runfile(‘F:/Python/exercise/pygame/untitled0.py‘, wdir=‘F:/Python/exercise/pygame‘) { "args": { "age": "22", "name": "germey" }, "headers": { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Host": "httpbin.org", "User-Agent": "python-requests/2.18.4" }, "origin": "182.108.3.27", "url": "http://httpbin.org/get?name=germey&age=22" } {‘args‘: {‘age‘: ‘22‘, ‘name‘: ‘germey‘}, ‘headers‘: {‘Accept‘: ‘*/*‘, ‘Accept-Encoding‘: ‘gzip, deflate‘, ‘Connection‘: ‘close‘, ‘Host‘: ‘httpbin.org‘, ‘User-Agent‘: ‘python-requests/2.18.4‘}, ‘origin‘: ‘182.108.3.27‘, ‘url‘: ‘http://httpbin.org/get?name=germey&age=22‘}
但要注意的是如果不是JSON格式便会出现解析错误json.decoder.JSONDecodeError错误
- 抓取二进制数据
在抓取网页中,我们抓取的是一个页面,也就是一个HTML文件,如果想抓取图片,音频,视频等文件,则需要抓取他们的二进制文件,再将它们解码得到
import requests r = requests.get("https://github.com/favicon.ico") print(r.text) print(r.content)
打开后我们是这样的
可以看出其有两个属性,一个是text属性,其为Unicode类型的文件,也就是符号集类型,其中英文字母其还是为英文,但中文字符就会表示为乱码的形式,一个为content属性,其为二进制形式的类型,开头有一个b表示其文件类型
再添加代码打开文件
with open(‘facicon.ico‘,‘wb‘) as f: f.write(r.content)
其中open函数的第一个参数为图片名称,第二个参数为以二进制方式打开,然后就会发现在当前文件夹下存储了一个名为favicon.ico的图标
不过这里我有一点疑惑,为何不是存储为一个包含这些二进制代码的txt文本文件,我猜测是因为,在读写文件的时候,电脑现将这个二进制编码进行转换,转得到的文件类型为ico则存为ico,为字符串则存为txt,那么应该在这个二进制文件里包含了存储为何种类型文件的信息
有的时候,有些网站可能禁止我们访问,这个时候加上User-agent就可以了,只要在requests.get(‘url‘,headers=‘ ‘)就可以了
2.post请求
import requests data = {‘name‘:‘germy‘,‘age‘:‘22‘} r = requests.post("https://httpbin.org/post",data=data) print(r.text) print(r.content)
{
"args": {},
"data": "",
"files": {},
"form": {
"age": "22",
"name": "germy"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"Content-Length": "17",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.18.4"
},
"json": null,
"origin": "218.64.33.30",
"url": "https://httpbin.org/post"
}
b‘{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "age": "22", \n "name": "germy"\n }, \n "headers": {\n "Accept": "*/*", \n "Accept-Encoding": "gzip, deflate", \n "Connection": "close", \n "Content-Length": "17", \n "Content-Type": "application/x-www-form-urlencoded", \n "Host": "httpbin.org", \n "User-Agent": "python-requests/2.18.4"\n }, \n "json": null, \n "origin": "218.64.33.30", \n "url": "https://httpbin.org/post"\n}\n‘
可以得到返回结果,其中form就是提交的数据,这就证明POST请求提交成功了
可以通过requests.status_code得到状态码,此外还有history,url,cookies,headers等属性
import requests r = requests.get("http://www.jianshu.com") exit() if r.status_code == requests.codes.ok else print("Request Successfully")
显示为Request Successfully
当然requests.codes有ok这个条件码,我们用这个条件码可以得到相应的状态码200,当然我们可不止这一个条件码,还有很多
原文地址:https://www.cnblogs.com/gausstu/p/9508903.html