Mooc_北理_Python爬虫学习_1(requests库相关)

**

request 库的 get 方法。

**

r = requests.get(url)
requests.get(url,params=None,**kwargs)
#url: 拟获取页面的url链接。
#params:url中的额外参数,字典或字节流格式,可选。(字节流格式是啥?)
#**kwargs:12个控制访问的参数。

request 提供七种常用方法。但最基本的只有 request 方法,其他六种方法都是其中着一种方法的“简化版”。

Response:

1.什么是Response?
服务器收到浏览器发送的信息后,能够根据浏览器发送信息的内容,做出相应的处理,然后把消息回传给浏览器,这个过程就叫做HTTP Response。
2.Response中包含什么?
2.1 响应状态:有多种响应状态,比如200代表成功,301 跳转页面,404 表示找不到页面,502 表示服务器错误;
2.2 响应头(Response Headers):比如内容类型,内容长度,服务器信息,设置Cookie等;
2.3 响应体:响应体最主要的部分,包含了请求资源的内容,比如网页 HTML 代码,图片二进制数据等。

sponse对象的属性

属性表格
r.status_codeHTTP请求的返回状态,200表示连接成功,404表示失败
r.texturl对应的页面内容
r.encoding从HTTP的header中猜测的相应内容编码方式
r.apparent_encoding从内容中分析出的相应内容编码方式(好像比encoding更牛逼点,那encoding有啥用嘞?直接全都apparent_encoding好了啊)
r.contentHTTP响应内容的二进制形式

操作基本步骤(通用框架)

在这里插入图片描述
requests库的异常

异常说明
ConnectionError网络连接错误异常,如DNS查询失败、拒绝连接等
HTTPErrorHTTP协议层面出现的错误异常
URLRequiredURL缺失异常
TooManyRedirects超过最大重定向次数,产生重定向异常(访问的数量过多)
ConnectTimeout连接远程服务器超时异常(仅指与远程服务器连接的超时异常)
Timeout请求URL超时,产生超时异常(发出URL请求,到收到,整个过程超时异常)

通用代码框架

#需要用到r.rayse_for_status() : 如果状态不是200,引发HTTPError异常。
import requests
def getHTMLText(url)
	try:
		r.requests.get(url,timeout = 30)
		r.raise_for_status()
		r.encoding = r.apparent_encoding
		return r.text
	except:
		return"产生异常"

HTTP协议级requests库方法

Requests库的七个主要方法

方法说明
requests.request()构造一个请求,支撑以下各方法的基础方法(就是上面说的下面的全是这个的分支,它是爸爸)
requests.get获取HTML网页的主要方法,对应于HTTP的GET
requests.head()获取HTML网页头信息
requests.post()向HTML网页提交POST请求
requests.put()向HTML网页提交PUT请求
requests.patch()向HTML网页提交局部修改请求
requests.delete()向HTML页面提交删除请求

HTTP协议:超文本传输协议
URL格式: http://host[:port][path]
host:合法的Internet主机域名或IP地址。
port:端口号,默认80。
path:请求资源的路径。
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。

HTTP协议对资源的操作方法共六种,分别对应requests库除了request的七种方法。即,

方法说明
GET请求获取URL位置的资源
HEAD请求URL位置资源的响应消息报告,即获取该资源的头部信息
POST请求向URL位置的资源后附加新的数据
PUT请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE请求删除URL位置存贮的资源

get、head:获得资源信息。
put、post、patch:改变url信息。
delete:删除url信息。

>>> r = requests.head('http://www.baidu.com')
>>> r.headers
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Connection': 'keep-alive', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Sat, 09 May 2020 07:47:53 GMT', 'Last-Modified': 'Mon, 13 Jun 2016 02:50:36 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18'}
>>> r.text
''  #内容为空。
#用较少流量获得信息。获得资源的概要信息。(不懂这句话啥意思,大概就是”准确获取信息”吧。。。)
>>> payload = {'key1':'value1','key2':'value2'}
>>> r = requests.post('http://httpbin.org/post',data = payload)
>>> r.text
'{(前面一堆)"form": {\n    "key1": "value1", \n    "key2": "value2"\n  }, (后面一堆)'反正就是有上面这块字典类型的东西在里面。
#当我们向URL post一个字典或键值对时,会自动放入form(表单)字段下。
#若提交的时字符串,则该字符串会被存放到data字段下。

Requests库主要方法解析

前面提到了requests库的七种方法下面进行逐一解析。

request方法(基础方法):
requests.request(method,url,**kwargs)
method:请求方式,对应get/put/post等7种方式。 一共有:‘GET’ ‘HEAD’ ‘POST’ ’ PUT’ ‘PATCH’ ‘delete’ ‘OPTIONS’ (options是获得参数,平时使用较少)可以用request直接实现,或者用request.get 啥的实现
**kwargs:控制访问的参数,13个。都是可选项。

  1. params:字典或字节序列,作为参数增加到url中
    将键值对加入url,可以根据这些参数筛选内容。
 kv = {'key1':'value1','key2':'value2'}
 r = requests.request('GET','http://python123.io/ws',params = kv)
 print(r.url)
# 结果为:https://python123.io/ws?key1=value1&key2=value2 

  1. data:字典、字节序列或文件对象,作为Request的内容。
    提交的键值对并不放在url里,而是放在url对应位置的地方作为数据存储。(不是很懂这句话的意思,应该是说作为内容存储,而不是名字)
 kv = {'key1':'value1','key2':'value2'}
 r = requests.request('POST','http://python123.io/ws',data = kv)
 body = '主题内容'
 r = requests.request('POST','http://python123.io/ws',data = body)
#第一次学习运行的时候报错了。。。可能学到后期会慢慢明白。。。。。
  1. json:JSON格式的数据,作为Request的内容
    最经常使用的数据格式,作为内容部分向服务器提交。
kv = {'key1':'value1'}
r = requests.request('POST','http://Python123.io/ws',json = kv)
  1. headers: 字典,HTTP定制头。利用这个字段来定制访问某个url的协议头。访问时headers向服务器访问的时候就是模拟Chrome10向url进行访问。
hd = {'user-agent':'Chrome/10'}
r = requests.request('POST','http://python123.io/ws',headers = hd
  1. cookies:字典或CookieJar,Request中的cookie
  2. auth:元组,支持HTTP认证功能 (5 和 6都比较高级)
  3. file :字典类型,向服务器传输文件时的字段。
fs = {'file':'open('data.xls','rb')}
r = requests.request('POST','http://python123.io/ws',files = fs)
  1. timeout: 设定超时时间,秒为单位。若在timeout范围内请求没有返回,则会产生一个timeout的异常。
r = requests.request('GET','http://www.baidu.com',timeout = 10)
  1. proxies: 字典类型设定访问代理服务器,可以增加登录认证
    有效隐藏对爬虫的逆追踪。
 pxs = {'http':'http://user:pass@10.10.10:1234','http':'https://10.10.10.1:4321'}
 r = requests.request('GET','http://www.baidu.com', proxies = pxs)
  1. allow_redirects: True/False,默认为True,重定向开关
  2. stream:True/False,默认为True,获取内容立即下载开关
  3. verify: True/False,默认为True,认证SSL证书开关
  4. cert:本地SSL证书路径
    感觉以上的kwargs啥的都比较复杂,现在先了解一下在以后的学习中再慢慢体会。。。

get方法:
request.get(url,params = None,**kwargs)
get方法对应的就是request方法中第一个参数设定为’GET’的方法。
params 对应的就是request库中kwargs中第一个参数。只不过这里它自动封装好了,而get中的kwargs对应的参数就只有12个(少了params)

其他方法也和get方法类似,与request方法中method一一对应。
requests.head(url,**kwargs)
requests.post(url,data = None,json = None,**kwargs)
request.put(url,data = None,**kwargs)
request.patch(url,data = None,**kwargs)
request.delete(url,**kwargs)
因为涉及到这些方法(get,head…)常常会用到固定的参数(比如get里的params)所以就把这些参数和对应的方法自动封装好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值