Day 1【Datawhale】爬虫入门学习——GET与POST请求

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27283619/article/details/89071892

1. GET和POST请求

1.1GET和POST的简单理解

GET和POST都是向服务器请求网页内容。不过这两者的区别还是挺大的。
GET:把请求信息放在URL中,如在百度中搜索"Datawhale",那么https://www.baidu.com/s?wd=Datawhale,我们会发现提交的搜索词在URL中。
POST:把请求信息放在一个表单里,包含在请求体中,而不是放在URL中进行提交。

1.2 二者的区别

  • GET请求的参数包含在URL中,数据可以在URL中看到,而POST的请求是通过表单的形式传输,包含在请求体中,不在URL中。
  • GET请求提交的数据最多只有1024字节,而POST没有限制。
  • 如果涉及到密码、隐私、大文件,我们通常使用POST的方式。

2. 请求头

2.1 请求头的概念

简单的说就是我们访问网页提交给服务器的信息,换句话说也就是服务器要给我们信息所要使用的附加信息。通常比较重要的信息是Cookie、Referer、User-Agent等。

  • Acccept
    请求报头域,用于指定客户端可以接受哪些类型的信息。
  • Accept-Language
    指定客户端可以接受的语言类型。
  • Accept-Encoding
    指定客户端可接受的内容编码。
  • Host
    用于指定请求资源主机的IP和端口号,其内容为请求URL的原始服务器或网关的位置。从HTTP 1.1版本开始,请求必须包含此内容。
  • Cookie
    同Cookies。是网站为了辨别用户进行会话跟踪二存储在用户本地的数据。它的主要作用是维持当前访问会话。
  • Referer
    用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
  • User-Agent
    简称UA,它是一个特殊的字符串头,帮助服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在伪装浏览器时需要加上此信息,否则会被识别禁止访问。
  • Content-Type
    也叫互联网媒体类型(Internet Media Type)或者MIME类型。在HTTP协议消息头中,它用来表示具体请求中的媒体类型信息。如:text/html代表HTML格式,image/gif代表GIF图片。

3 响应状态码

响应状态码代表服务器的相应状态。200代表服务器正常响应,给我们正常提供服务,403代表服务器拒绝了我们的请求,不给我们访问。所以分析相应状态码,保证状态码是200,我们才能进行下一步处理。否则直接忽略。下面列出常见的一些相应状态码。

状态码 说明 详情
200 成功 服务器成功返回了信息
301 永久移动 请求的网页已永久移动到新的位置,即永久重定向
302 临时移动 请求的网页暂时跳转到其他网页,即暂时重定向
305 使用代理 请求者应该使用代理访问该网页
307 临时重定向 请求的资源临时虫其他位置响应
400 错误请求 服务器无法解析该请求
401 未授权 请求没有进行身份验证或验证未通过
403 禁止访问 服务器拒绝此请求
404 未找到 服务器找不到请求的网页
405 方法禁用 服务器禁用了请求中指定的方法
408 请求超时 服务器请求超时

4 响应头

响应头包含了服务器对请求的应答信息。如Content-Type、Server、Set-Cookie等。

  • Date
    标识响应产生的时间。
  • Last-Modified
    指定资源的最后修改时间
  • Content-Encoding
    指定响应内容的编码
  • Server
    包含服务器的信息,比如名称、版本号等。
  • Content-Type
    文档类型,指定返回的数据类型是什么。
  • Set-Cookie
    设置Cookie。响应头中的Set-Cookie告诉浏览器需要将此内容放在Cookies中,下次请求携带Cookies请求。
  • Expires
    指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。

5 使用urllib实现请求

因为考虑到请求工具中,requests库比urllib库更加Pythonic,个人更加推荐requests库。
关于urllib库的更多用法请参照官方教程
这里仅仅列出利用urllib实现GET和POST请求的示例。

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 7 16:04:09 2019

@author: Jock
"""
import urllib.request

# 构建GET请求
f = urllib.request.urlopen("https://www.baidu.com")
print(f.read().decode('utf-8'))
# 构建POST请求
req = urllib.request.Request(url='http://httpbin.org/post',\
                             data=b'Datawhale') # 构建请求对象
with urllib.request.urlopen(req) as f:
    print(f.read().decode('utf-8'))

6 使用requests库实现请求

在所有的请求库中requests,非常的强大和优雅,非常推荐使用requests库,而不是其他的请求库。requests库的官文文档有中文版本,非常友好,所以具体用法请参照官网文档
这里放出基于requests实现GET和POST请求的示例

# -*- coding: utf-8 -*-
"""
Created on Sun Apr 7 16:04:09 2019

@author: Jock
"""
import requests


# 构建GET请求
r = requests.get('https://www.baidu.com')
print(r.text[:500])

# 构建POST请求
r = requests.post('http://httpbin.org/post', data={'key':'value'})
print(r.text)

猜你喜欢

转载自blog.csdn.net/qq_27283619/article/details/89071892