天天看点

python http请求_Python---HTTP 请求实战练习

如果要进行客户端和服务器端之间的消息传递,我们可以使用HTTP协议请求

HTTP 协议请求主要分6种类型 (GET 和 POST 较常用)

1)GET 请求

通过URL网址传递信息,可以直接在URL中写上要传递的信息,也可以由表单进行传递(表单中的信息会自动转化为URL地址中的数据,通过URL地址传递)

备注:已经取得资源,并将资源添加到响应中的消息体

2)POST 请求

可以向服务器提交数据,是一种比较安全的数据传递方式,比如在登录时,经常使用 POST 请求发送数据

3)PUT 请求

请求服务器存储一个资源,通常需要制定存储的位置

4)DELETE 请求

请求服务器删除一个资源

5)HEAD 请求

请求获取对应的 HTTP 报头信息

6)OPTIONS 请求

可以获得当前URL所支持的请求类型

Response Code

状态码:200 OK

表明请求已经成功. 默认情况下成功的请求将会被缓存

不同请求方式对于请求成功的意义如下:

GET:已经取得资源,并将资源添加到响应中的消息体.

HEAD:作为消息体的头部信息

POST:在消息体中描述此次请求的结果

请求成功对于PUT 和 DELETE 来说并不是200 ok 而是 204 所代表的没有资源 (或者 201 所代表的当一个资源首次被创建成功

以下是常见状态码及含义

状态码

英文

中文含义

200

OK

一切正常

301

Moved Permanently

重定向到新的URL,永久性

302

Found

重定向到临时URL,非永久性

304

Not Modified

请求的资源未更新

400

Bad Request

非法请求

401

Unauthorized

请求未经授权

403

Forbidden

禁止访问

404

Not Found

没有找到对应资源

500

Internal Server Error

服务器内部出现错误

501

Not Implemented

服务器不支持实现请求所需要的功能

1、GET 请求实例分析

比如我们打开百度,搜索 python 关键词,按回车键(Enter),此时会出现对应的查询结果

python http请求_Python---HTTP 请求实战练习

百度搜索python 网址的变化过程.png

对比网址,发现对应的查询信息是通过URL来传递的,但光看网址我们也不知道采用的是什么方法,那么我们打开浏览器自带的开发者工具(F12)或者用 Fiddler 抓包 来查看请求

python http请求_Python---HTTP 请求实战练习

浏览器F12看请求信息.png

python http请求_Python---HTTP 请求实战练习

Fiddler 抓包.png

分析网址,字段 wd 存储的就是用户带检索的关键词,由此推简化下网址

python http请求_Python---HTTP 请求实战练习

简化网址重新搜索.png

得到这个规律(通过 GET 请求,用爬虫实现在百度上自动查询某个关键词),用 python 实现如下:

import urllib.request

keywd = "python" # 给变量赋值搜索关键词

url = "https://www.baidu.com/s?wd=" + keywd

req =urllib.request.Request(url)

data = urllib.request.urlopen(req).read() # 将爬取的网页内容赋值给变量 file

fhandle = open("F:/Python Exercise/Part 4/3.html","wb") # 目录提前建好,“wb” 二进制写入

fhandle.write(data) # 写入数据

fhandle.close()

print(fhandle)

# 运行结果

Process finished with exit code 0

当我们搜索中文关键词时,执行上述代码提示编码问题,需要优化下(对搜索关键字 quote)

(UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-13: ordinal not in range(128)

)

python http请求_Python---HTTP 请求实战练习

搜索中文关键词时,执行提示编码问题.png

优化后代码如下:

key = '网易音乐'

keywd = urllib.request.quote(key)

【GET 请求使用总结】

1)构建对应的URL地址(包含 GET 请求的字段名和字段内容等信息),格式为 地址 + 参数,即 http(s)://网址?字段名1=字段内容1 & 字段名2=字段内容2

2)将对应的 URL 作为参数,构建 Request 对象

3)通过 urlopen() 打开构建的 Request 对象

4)后续处理操作,如读取网页内容,将内容写入文件等

2、POST 请求实例分析

python http请求_Python---HTTP 请求实战练习

使用爬虫自动提交POST请求.png

【思路】

1)设置好 URL 网址

2)构建表单数据,并使用 urllib.request.urlencode 对数据进行编码处理

3)创建 Request 对象,参数包括 URL 地址和要传递的数据

4)使用 add_header() 添加头信息,模拟浏览器进行爬取

5)使用 urllib.request.urlopen() 打开对应的 Request 对象,完成信息的传递

6)后续处理,如读取网页内容,将内容写入文件等