Python网络爬虫与信息提取-Day2-requests库(2)

来源:互联网 发布:建筑工程预算软件 编辑:程序博客网 时间:2024/05/29 03:19

HTTP协议

HTTPHypertext Transfer Protocol,超文本传输协议

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议

HTTP协议采用URL作为定位网络资源的标识,URL格式如下:

http://host[:port][path]

host: 合法的Internet主机域名或IP地址

port: 端口号,缺省端口为80

path: 请求资源的

 

HTTP URL实例:

http://www.bit.edu.cn

http://220.181.111.188/duty

HTTP URL的理解:

URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据

 

HTTP协议对资源的操作

GET 请求获取URL位置的资源

HEAD 请求获取URL位置资源的响应消息报告,即获得该资源的头POST请求向URL位置的资源后附加新的数据

PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源

PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容

DELETE 请求删除URL位置存储的

 

通过URL和命令管理资源,操作独立无状态,网络通道及服务器成为了黑盒子

 

PATCHPUT的区别

假设URL位置有一组数据UserInfo,包括UserIDUserName20个字段

需求:用户修改了UserName,其他不变

• 采用PATCH,仅向URL提交UserName的局部更新请求

• 采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除

PATCH的最主要好处:节省网络带宽

 

HTTP协议与Request库方法功能是一一对应的

 

1.head()方法

>>> import requests

>>> r = requests.head('http://httpbin.org/get')

>>> r.headers

{'Connection': 'keep-alive', 'Server': 'meinheld/0.6.1', 'Date': 'Tue, 22 Aug 2017 14:46:44 GMT', 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'X-Powered-By': 'Flask', 'X-Processed-Time': '0.000668048858643', 'Content-Length': '265', 'Via': '1.1 vegur'}

>>> r.text

''

head方法去访问一个链接,用r.headers来反馈展示的头部信息的内容,试图展示它的全部内容时内容是空

所以head方法可以用很少的流量获取网络资源的概要信息


2.post()方法

使用post()方法向服务器提供新增数据

>>> import requests

>>> payload = {'key1':'value1','key2':'value2'}

>>> r = requests.post("http://httpbin.org/post",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": "112.0.247.58",

  "url": "http://httpbin.org/post"

}

我们发现它们被放到了form字段下,说明向URL POST一个字典,自动编码为form(表单)

 

如果我们不提交键值对而提交字符串,我们发现它被存到了data字段下

>>> r = requests.post("http://httpbin.org/post",data='ABC')

>>> print(r.text)

{

  "args": {},

  "data": "ABC",

  "files": {},

  "form": {},

  "headers": {

    "Accept": "*/*",

    "Accept-Encoding": "gzip, deflate",

    "Connection": "close",

    "Content-Length": "3",

    "Host": "httpbin.org",

    "User-Agent": "python-requests/2.18.4"

  },

  "json": null,

  "origin": "112.0.247.58",

  "url": "http://httpbin.org/post"

}

所以,post()方法根据用户提交内容的不同,在服务器上会做数据的相关整理


3.put()

put()方法与post()类似,只不过它会把原有数据覆盖掉

阅读全文
1 0
原创粉丝点击