import requests
requests.request() 构造一个请求,以支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET (获取内容)
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post() 向HTML网页提交POST请求的方法,对应于HTTP的POST (发送请求)
requests.put() 向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML网页提交删除请求,对应于HTTP的DELETE
r = requests.get('http://www.baidu.com') # 捕获网页 百度内容
print(r, type(r)) # 打印r的类型
print(r.encoding) # 从HTTP head中猜测相应内容编码方式
print(r.apparent_encoding) # 从HTTP 内容中猜测相应内容编码方式并套用
r.encoding = r.apparent_encoding # 转化编码方式
print(r.status_code) # 打印 连接成功与否信息
# print(r.text) # 以字符串的形式来返回(读取)URL内容
# print(r.content) # 转化为二进制形式读取内容
f1=open('a.html', 'w', encoding='utf-8') # 创建网页文件a.html 如:file:///D:/Python_study/b.html
f1.write(r.text) # 把趴取的网页内容写入a.html
f1.close()
f2 = open('b.html', 'wb') # 这样就把 r这个网页用二进制代码保存了下来。
f2.write(r.content)
f2.close()
''' httpbin 返回信息捕获
由客户端向服务端发出,可以分为4部分内容:
请求方法(request method):常见的请求方法有两种:GET AND POST
请求的网址(request URL):见百度百科,如Accept:浏览器可接受的MIME类型。Accept-Charset:浏览器可接受的字符集。
Accept-Encoding:浏览器能够进行解码的数据编码方式 Content-Length:表示请求消息正文的长度。
Cookie:这是最重要的请求头信息之一
请求头(request headers):用来说明服务器要使用的附加信息
请求体(request Body):一般它承载的内容是post请求中的表单数据,面对于get 请求 '''
s = requests.get('http://httpbin.org/get')
print(s.text)
''' 添加额外信息'''
s1=requests.get('http://httpbin.org/get?name=zhangsan&sex=man')
print(s1.text)
'''以字典型式来添加额外信息
1、运行结果可以判断,请求的链接自动被构造成了:http://httpbin.org
2、网页返回类型是str类型,由于httpbin网页返回的格式是Json格式,可以直接调用Json()方法,得到字典格式 '''
info = {'name': 'zhangsan', 'sex': 'man'}
s2 = requests.get("http://httpbin.org/get", params=info)
print(s2.status_code)
print(s2.text) # 打印的内容为字符串类型
print(type(s2.text))
print(s2.json()) # json()把s2以字典类型打印
print(type(s2.json()))
r=requests.get('https://www.so.com/s?q=python') # 趴取一个网页 https://www.so.com/
r.encoding = r.apparent_encoding # 对网页的内容进行转码
print(r.status_code) # 打印连接是否成功
print(r.text)
f=open("c1.html", 'wb') # 创建一个html文件
f.write(r.content) # 把趴取得到的r网页内容与入c1文件中
f.close()
趴取百度 百度有禁止趴取设置,因而趴取不到内容
r = requests.get('https://www.baidu.com/s?q=python')
r.encoding=r.apparent_encoding
print(r.text)
fp = open('d.html', 'wb')
fp.write(r.content)
fp.close()
趴取360的网页 趴取成功
r = requests.get('https://www.so.com/s?wd=python')
r.encoding=r.apparent_encoding
print(r.text)
fp = open('d.html', 'wb')
fp.write(r.content)
fp.close()
'''
URL格式
http://host[path] host:合法的internet主机域名或IP地址 path:请求资源的路径,指主机服务器对应的地址
例如:https://www.zhihu.com/(host 这是主机域名) creator/featured-question(path 这是资源路径,主机服务器里对应的地址)
HTTP全称是 Hyper Text Transfer Protocol,即超文本传输协议
HTTPS全称是 Hyper Text Transfer Protocol over Secure Socket Layer,指HTTP的安全版,即HTTP下加入SSL(加密)层后的简称。
'''
head = {'user-Agent':'Mozilla/s.e'}
r = requests.get('https://www.zhihu.com/explore', headers=head) # 不用head趴取失败,和百度一样对非浏览器访问都拒绝,
# 这时要加一个请求头来访问“headers=head”
r.encoding=r.apparent_encoding
print(r.status_code)
print(r.text)
r1 = open('d1.html', 'wb') # 把趴取的内容保存下来,即d1
r1.write(r.content) # 再把趴取的内容用二进制写入
r1.close() # 关闭
状态码
POST请求(向服务器传送数据): data:提交字符信息 from: 提交表单信息 files:文件上传
发送表单数据给httpbin.org/post (是post路径,不是get)
发送数据给服务器和之前的params参数不同,例如excel里面的表格搜索
da = 'hello word' # 向httpbin.org/post 发送字符信息 见data
da = {'name': "zhangwu", 'password': '198711'} # 向httpbin.org/post 发送表单信息 见form
r = requests.post('http://httpbin.org/post',data=da)
print(r.status_code) # 打印状态码,确认是否连接成功
print(r.text)
发送文件数据给httpbin。可以提交文本,图片,视频,音频等等
f = {'file':open('star.png', 'rb')} # 要打开的文件为图片格式的"rb",文本的话是‘r’
r = requests.post('http://httpbin.org/post', files=f)
print(r.status_code)
print(r.text)
f= open('e.html', 'wb')
f.write(r.content)
r.close()
'''
http协议对事务处理是没有记忆功能的,当我们向服务器发送请求后,服务器解析此请求,
然后返回对应的响应,服务器负责完成这个过程,而这个过程是完全独立的,服务器不会记录前后状
态的变化,也就是缺少状态记录。例如密码登录无法实现,用于保持http连接状态的技术就出现了,它们分别是会话和cookies
会话在网站的服务器,用来保存用户的会话信息;cookies在客户端,也可以理解为在浏览器端
cookies:cookies 指某些网站为了辨别用户身份、进行会话跟踪而存储在用户本地终端上的数据。'''
'''cookies的高级用法''' #'cookie':'zap=
head = {
'Uses-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
r = requests.get("https://www.zhihu.com",headers = head)
print(r.status_code)
fp=open('c2.html','wb')
fp.write(r.content)
fp.close()
print(r.cookies)
for key, value in r.cookies.items():
print(key + "="+value)