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 网址的变化过程.png对比网址,发现对应的查询信息是通过URL来传递的,但光看网址我们也不知道采用的是什么方法,那么我们打开浏览器自带的开发者工具(F12)或者用 Fiddler 抓包 来查看请求
浏览器F12看请求信息.png Fiddler 抓包.png分析网址,字段 wd 存储的就是用户带检索的关键词,由此推简化下网址https://www.baidu.com/s?wd=python,复制到浏览器,刷新(F5)
简化网址重新搜索.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)
# 运行结果
<_io.BufferedWriter name='F:/Python Exercise/Part 4/3.html'>
Process finished with exit code 0
当我们搜索中文关键词时,执行上述代码提示编码问题,需要优化下(对搜索关键字 quote)
(UnicodeEncodeError: 'ascii' codec can't encode characters in position 10-13: ordinal not in range(128)
)
优化后代码如下:
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 请求实例分析
比如我们在进行注册、登录等操作时,基本上都会遇到 POST 请求,因登录需要用到 Cookie 知识,此处将以表单为例(http://www.w3school.com.cn/tiy/t.asp?f=html_form_submit)
使用爬虫自动提交POST请求.png【思路】
1)设置好 URL 网址
2)构建表单数据,并使用 urllib.request.urlencode 对数据进行编码处理
3)创建 Request 对象,参数包括 URL 地址和要传递的数据
4)使用 add_header() 添加头信息,模拟浏览器进行爬取
5)使用 urllib.request.urlopen() 打开对应的 Request 对象,完成信息的传递
6)后续处理,如读取网页内容,将内容写入文件等