Python学习

发布于 2021-08-31  62 次阅读


菜鸡学习笔记 — request库基本使用

本学习笔记总结自慕课北京理工大学嵩天老师的课程,感谢老师提供的优质课程

课程链接
https://www.icourse163.org/course/BIT-1001870001

request库基于urllib,是Python中一个重要的http库。
一、requests库的主要方法
(1) get()方法:
对应HTTP中的GET

基本语法 :

r = requests.get(url,paramas,kwargs)
#url为访问页面的url链接,为必选
#params是url的额外参数,可以为字典或字节流格式,可缺省
#kwargs是访问控制参数,有12个

get方法构建一个向服务器请求资源的Request对象

requests.get返回的内容是一个包含服务器资源的response对象,由变量r表示

(2)head()方法
对应HTTP中的HEAD,用于获取网页的头部信息

(3)post()方法
对应HTTP中的POST,向网页提交post请求,向url位置资源添加新的数据
(4)put()方法
对应HTTP中的PUT,向网页提交put请求,覆盖url位置全部数据
(5)patch()方法
对应HTTP中的PATCH,向网页提交局部修改请求,修改该url位置资源的部分内容

(6)delete()方法
对应HTTP中的DELETE,向网页提交删除请求

(7)request()方法
是requests库中最基本的方法,其他六种方法均为在此方法基础上封装而成

调用方式

requests.request(method,url,kwargs)

method 指请求方式,可以使用GET,POST等作为参数
url 是网页链接
kwargs 为访问控制参数,共有13个参数可选
分别为:

params:将字典或字节作为参数添加至url中
在这里插入图片描述
data:将字典、字节或文件对象作为Request的内容向服务器提交

json:将json数据成员作为Request的内容向服务器提交,提交内容将被存储在服务器的json域上

headers:对应头字段,可以通过该参数定制请求头,可以用来伪装爬虫

例如通过下列代码将爬虫伪装成一个浏览器访问
在这里插入图片描述
cookies:从HTTP协议中解析cookies,字典或者CookieJar, Request中的cookie
auth:元组,支持HTTP认证功能
files: 字典类型,可以向服务器提交一个文件

fs = {"file":open('data.xls','rb')}
r = requests.request("POST","http://python123.io/ws",file = fs)

timeout:设置超时时间,以秒为单位,超时将返回一个timeout异常

proxies:字典类型,用于设置代理服务器,可以增加登录认证

pxs = {'http':'http://user:pass@10.10.1:1234' 
        'https':'https://10.10.1:4321'}
r = requests.request('GET','http://www.baidu.com/',proxies = pxs)

allow_redirects: bool型 默认为True 重定向开关

stream :True/Flase 默认为Ture 获取内容立即下载开关

verify:字段 也是bool型 默认为True 认证ssl证书开关

二、response对象常用属性

status_code:
HTTP请求的返回状态,200表示成功,其他表示失败

text:
HTTP响应内容,字符串格式返回,获取原始数据的常用方式

encoding:
根据HTTP返回头中charset字段判断的页面编码格式,若charset字段不存在,则默认编码为ISO-8859-1

apparent_encoding:
根据返回页面内容判断页面编码格式

content:
返回响应内容的二进制形式,是获取图片或者视频的常用方式

以百度页面为例子分别验证


在这里插入图片描述

首先建立response对象,获取服务器页面资源,并使用status_code方法检测连接是否成功,

在这里插入图片描述

使用text查看发现有很多乱码


在这里插入图片描述

调整一下使用的编码格式,内容成功解析

使用content,内容被以十六进制的方式显示

在这里插入图片描述

三、爬取网页的通用代码框架

import requests

def getHtmlText(url):
    try:
        r = requests.get(url,timeout = 30)
        r.raise_for_status()#如果状态不是200,引发HTTPerror异常
        r.encoding = r.apparent_encoding
        return t.text
    except:
        return "产生异常"
if __name__=="__main__":
    url = "http://www.baidu.com"
    print(getHtmlText(url))