码迷,mamicode.com
首页 > 编程语言 > 详细

python3网络爬虫学习——使用requests(1)

时间:2018-08-21 15:21:07      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:乱码   图标   let   读写文件   rgs   length   org   image   agent   

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,当然我们可不止这一个条件码,还有很多

 

python3网络爬虫学习——使用requests(1)

标签:乱码   图标   let   读写文件   rgs   length   org   image   agent   

原文地址:https://www.cnblogs.com/gausstu/p/9508903.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!