学习笔记之——单元1:Requests库入门

一、Requests库的安装

Requests库是目前公认的爬取网页最好的第三方库,特点是:简单、简洁。

1. Windows下Requests的安装

win+R==>cmd(管理员命令)==>pip install requests
测试:
启动python IDLE

>>> import requests # 导入requests模块,并测试是否安装成功
>>> r = requests.get('http://www.baidu.com') # 访问百度的首页
>>> r.status_code  # 查看访问状态码
200 # 200代表访问成功
>>> r.encoding = 'utf-8' # 改变编码方式为utf-8
>>> r.text # 查看网页内容

二、HTTP协议

1. HTTP基本概念

HTTP,Hypertext 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对应一个数据资源。

2. HTTP协议对资源的操作

总结:这个其实就类似于数据库,连接、改变、追加、删除等操作。

  1. GET——请求获取URL位置的资源。获得全部资源。
  2. HEAD——请求获取URL位置资源的响应消息报告,即获得该资源的头部信息。当资源大时,应用这个。
  3. POST——请求向URL位置的资源后附加新的数据。
  4. PUT——请求向URL位置存储一个资源,覆盖原URL位置的资源。
  5. PATCH——请求局部更新URL位置的资源,即改变该处资源的部分内容。
  6. DELETE——请求删除URL位置存储的资源。
    这6个操作对应requests库的6个方法。
    比较PATCH和PUT的区别:
    假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段。
    需求:用户修改了UserName,其他不变。
    采用PATCH,仅向URL提交UserName的局部更新请求。优点是:节省网络带宽。
    采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除。
    |HTTP协议方法|Requests库方法|功能一致性|
    |---- -------|---- -----|--------|
    |GET |requests.get() |一致 |
    |HEAD |requests.head() |一致 |
    |POST |requests.post() |一致 |
    |PUT |requests.put() |一致 |
    |PATCH |requests.patch() |一致 |
    |DELETE |requests.delete()|一致 |
    (这个表格有点问题,无法正确显示,后面看看怎么改一下)

三、Response对象的属性、异常处理及通用爬虫代码框架

# 可以用一下方法查看所有的Response属性
>>> r = requests.get('http://www.baidu.com')
>>> r.url
'http://www.baidu.com/'
>>> help(r)

务必要牢记的Response的5个常用的属性

  1. r.status_code——HTTP请求的返回状态,200表示连接成功,505表示失败
  2. r.text——HTTP响应内容的字符串形式,即,url对应的页面内容。
  3. r.encoding——从HTTP header中猜测的响应内容编码方式。
  4. r.apparent_encoding——从内容中分析出的响应内容编码方式(备选编码方式)
  5. r.content——HTTP响应内容的二进制形式。
    比较r.encoding和r.apparent_encoding
    r.encoding:如果header中不存在charset,则认为编码为ISO-8859-1
    r.apparent_encoding:根据网页内容分析出的编码方式。
# Requests对象的属性使用流程
if r.status_code == 200: # 必须先要判断连接成功才可以进行后续操作
    r.text
    r.encoding
    r.apparent_encoding
    r.content
else: # 404或者其他原因出错将产生异常
    pass 

连接有风险,所以需要异常处理。
理解Requests库的异常

  1. requests.ConnectionError——网络连接异常,如DNS查询失败,拒绝连接等。
  2. requests.HTTPError——HTTP错误异常。
  3. requests.URLRequired——URL缺失异常。
  4. requests.TooManyRedirects——超过最大重定向次数,产生重定向异常。
  5. requests.ConnectTimeout——连接远程服务超时异常。
  6. requests.Timeout——请求URL超时,产生超时异常。
    重要的方法:
    r.raise_for_status()——如果不是200,产生异常requests.HTTPError # 判断返回是否正常
# 爬取网页的通用代码框架,目的是让爬虫稳定有效
import requests
def getHTMLText(url):
    try:
        r = requests.get(url,timeout=30)
        r.raise_for_status() # 如果状态不是200,引发HTTPError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return '产生异常'
if __name__ == '__main__':
    url = 'http://www.baidu.com'
    print(getHTMLText(url))      

四、Requests库的方法

1. Requests库的requests.get()方法

r = requests.get(url)
这行代码会进行下面的操作:

  1. 构造一个向服务器请求资源的Request对象——Request。
  2. 返回一个包含服务器资源的Request对象——Response。
    requests.get(url,params=None,**kwargs)
    url:拟获取页面的url链接。
    params:url中的额外参数,字典或字节流格式,可选
    **kwargs:12个控制访问的参数。

2. Requests库的requests.head()方法

requests.head(url, **kwargs)
url:拟获取页面的url链接
**:13个控制访问参数
head()方法可以用很少的网络流量,获取网站的概要信息。

>>> import requests
>>> r = requests.head('http://httpbin.org/get')
>>> r.headers
{'Connection': 'keep-alive', 'Server': 'gunicorn/19.9.0', 'Date': 'Thu, 17 Jan 2019 08:41:17 GMT', 'Content-Type': 'application/json', 'Content-Length': '267', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'Via': '1.1 vegur'}
>>> r.text
''

3. Requests库的requests.post()方法

requests.post(url,data=None,json=None,**kwargs)
url:拟更新页面的url链接
data:字典、字节序列或文件,Request的内容
json:JSON格式的数据,Request的内容
**kwargs:11个控制访问的参数

 >>> payload = dict(key1='value1', key2='value2')
       >>> r = requests.post('https://httpbin.org/post', data=payload)
       >>> print(r.text)
       {
         ...
         "form": {
           "key2": "value2",
           "key1": "value1"
         },
         ...
       }

向URL POST一个字典自动编码为form(表单)

4. Requests库的requests.request()方法

requests.request(method,url,**kwargs)
method:请求方式,对应get/post/put等7种方法。
url:拟获取页面的url链接。
**kwargs:控制访问的参数,共13个。

method:请求方式
r = requests.request(‘GET’,url,**kwargs)
r = requests.request(‘HEAD’,url,**kwargs)
r = requests.request('POST,url,**kwargs)
r = requests.request('PUT,url,**kwargs)
r = requests.request(‘PATCH’,url,**kwargs)
r = requests.request(‘DELETE’,url,**kwargs)
r = requests.request(‘OPTIONS’,url,**kwargs)
**kwargs:访问控制参数,均为可选项。

# 1. params:字典或字节序列, 作为参数增加到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

# 2. data:字典、字节序列或文件对象,作为Requests的内容
>>> 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)

# 3. json:JSON格式的数据,作为Request的内容
>>> kv = {'key1':'value1','key2':'value2'}
>>> r = requests.request('POST','http://python123.io/ws',json=kv)

# 4. headers:字典,HTTP定制头
 hd = {'user-agent':'Chrome/10'}
>>> r = requests.request('POST','http://python123.io/ws',headers=hd)

# 5. cookies:字典或CookieJar,Request中的cookie

# 6. auth:元组,支持HTTP认证功能

# 7. files:字典类型,传输文件
>>> fs = {'file':open('data.xls','rb')}
>>> r = requests.request('POST','http://python123.io/ws',file)

# 8. timeout:设定超时时间,秒为单位
>>> r = requests.request('GET','http://python123.io/ws',timeout=10)

# 9. proxies:字典类型,设定访问代理服务器,可以增加登录认证
>>> pxs = {'http':'http://user:pass@10.10.10.1:1234','https':'https://10.10.10.1:4321'}
>>> r = requests.request('GET','http://www.baidu.com',proxies=pxs)

# 10. allow_redirects:True/False,默认为True,重定向开关

# 11.stream:True/False,默认为True,获取内容立即下载开关

# 12.verify:True/False,默认为True,认证SSL证书开关

# 13.cert:本地SSL证书路径

5. Requests库的requests.put()方法

requests.put(url,data=None,**kwargs)
url:拟更新页面的url链接
data:字典、字节序列或文件,Request的内容
**kwargs:12个控制访问的参数

6. Requests库的requests.patch()方法

requests.patch(url,data=None,**kwargs)
url:拟更新页面的url链接
data:字典、字节序列或文件,Request的内容
**kwargs:12个控制访问的参数

7. Requests库的requests.delete()方法

url:拟删除页面的url链接
**kwargs:13个控制访问的参数

五、小结

Requests库入门
requests.request()
requests.get()
requests.head()
requests.post()
requests.put()
requests.patch()
requests.delete()
网络连接有风险,所以需要对于网络是否正常连接做检测。

六、参考资料

学习的北京理工大学嵩天老师的《Python网络爬虫与信息提取》

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值