Python3爬虫 | requests库

作者的话
各位,好久不见呀,最近项目上比较慢,平时抽不出时间进行python的学习,也没有发布相关的文章,和大家分享,实在是抱歉。前段时间,我们对pyhton的基本语法,进行了学习,熟悉了python这种非常简便的语法格式,从今天开始我们就来体验python的另外一种魅力——库。想要灵活的使用python进行开发就必然要熟悉python的各个库(库很多,只能说用哪个就学习哪个),之前我们也或多或少介绍部分库的使用,由于我们这个是爬虫系列,那自然是学习爬虫使用较多的库,今天就开始第一个库requests的学习了。

requests的介绍

就一句话介绍:

requests库是一个常用的用于http请求的模块,它使用python语言编写,可以方便的对网页进行爬取,是学习python爬虫的较好的http请求模块。

说白了,就是发起http请求。

但是这个http请求里面就有很多东西了,后面我们会慢慢了解到。

我们要用这个库肯定就要安装的,一般情况下,python的内置库是不包括大多数的,我们通常都是需要用pip进行安装,

pip install requests

requests的方法介绍

1、requests库的七个主要方法

方法 解释
requests.request() 构造一个请求,支持以下各种方法
requests.get() 获取html的主要方法
requests.head() 获取html头部信息的主要方法
requests.post() 向html网页提交post请求的方法
requests.put() 向html网页提交put请求的方法
requests.patch() 向html提交局部修改的请求
requests.delete() 向html提交删除请求

对于get、post、put、delete等这些http请求方式,你需要去简单了解下http相关知识,我们一般网页上常用get、post。

  • requests.get()

发起get请求,最常用的方法,基本语法格式:

r=requests.get(url,params,**kwargs)

url: 需要爬取的网站地址。
params: 翻译过来就是参数, url中的额外参数,字典或者字节流格式,可选。
**kwargs : 12个控制访问的参数

  1. 对于url,就比如http://baidu.com/, 这种的,实际浏览器输入的网址

  2. params,就是需要传入的参数,拼接在url后面的,通过是字典类型传入

params =  {
  'keyword': 'test',
  'pageIndex':0,
  'pageSize':10
}
  1. kwargs,可以有可选参数输入

可选参数还是挺多的,我copy过来啦,最常用的可能是headers,proxies,timeout,cookies

data:字典,字节序或文件对象,重点作为向服务器提供或提交资源是提交,需要和params进行区分,data提交的数据并不放在url链接里, 而是放在url链接对应位置的地方作为数据来存储。,它也可以接受一个字符串对象。
json:json格式的数据, json合适在相关的html,http相关的web开发中非常常见, 也是http最经常使用的数据格式, 他是作为内容部分可以向服务器提交。
例如:kv = {”key1’: ‘value1’}
r = requests.request(‘POST’, ‘http://python123.io/ws‘, json=kv)
headers:字典是http的相关语,对应了向某个url访问时所发起的http的头i字段, 可以用这个字段来定义http的访问的http头,可以用来模拟任何我们想模拟的浏览器来对url发起访问。
例子: hd = {‘user-agent’: ‘Chrome/10’}
r = requests.request(‘POST’, ‘http://python123.io/ws‘, headers=hd)
cookies:字典或CookieJar,指的是从http中解析cookie
auth:元组,用来支持http认证功能
files:字典, 是用来向服务器传输文件时使用的字段。
例子:fs = {‘files’: open(‘data.txt’, ‘rb’)}
r = requests.request(‘POST’, ‘http://python123.io/ws‘, files=fs)
timeout: 用于设定超时时间, 单位为秒,当发起一个get请求时可以设置一个timeout时间, 如果在timeout时间内请求内容没有返回, 将产生一个timeout的异常。
proxies:字典, 用来设置访问代理服务器。
allow_redirects: 开关, 表示是否允许对url进行重定向, 默认为True。
stream: 开关, 指是否对获取内容进行立即下载, 默认为True。
verify:开关, 用于认证SSL证书, 默认为True。
cert: 用于设置保存本地SSL证书路径

通过上面就可以看出,requests库还是挺强大的,各种情况都考虑到了。

response对象

r=requests.get("http://www.baidu.com")

requests库请求返回的对象,用来接收相关返回。接着我们需要了解这个对象的常用属性:

属性 说明
r.status_code http请求的返回状态,若为200则表示请求成功。
r.text http响应内容的字符串形式,即返回的页面内容
r.encoding 从http header 中猜测的相应内容编码方式
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
r.content http响应内容的二进制形式

上面的描述非常清楚,通过这个对象我们可以了解到,这次请求是否成功,成功的话返回的内容,以及编码,这些都对我们后面分析返回的内容有帮助

简单代码示例

我们百度搜索的时候,你仔细会发现,网址部分会出现如下:

https://www.baidu.com/s?wd=KEYWORD

KEYWORD就是我们要所搜的内容

Python3爬虫 | requests库_第1张图片
示例
import requests
keyword='我们都要好好的'
try:
    kv={'wd':keyword}
    r=requests.get('https://www.baidu.com/s',params=kv)
    r.raise_for_status()
    r.encoding=r.apparent_encoding 
    print(len(r.text)) 
except:
    print("失败")

语法示例

  1. requests方法示例
requests.get(‘https://github.com/timeline.json’)# GET请求
requests.post(“http://httpbin.org/post”)# POST请求
requests.put(“http://httpbin.org/put”) # PUT请求
requests.delete(“http://httpbin.org/delete”) # DELETE请求
requests.head(“http://httpbin.org/get”) # HEAD请求
requests.options(“http://httpbin.org/get” )# OPTIONS请求
  1. response对象示例
r.encoding #获取当前的编码
r.encoding = 'utf-8'#设置编码
r.text#以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content#以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
r.headers#以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.status_code #响应状态码
r.raw#返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()   
r.ok# 查看r.ok的布尔值便可以知道是否登陆成功
 #*特殊方法*#
r.json()#Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status()#失败请求(非200响应)抛出异常
  1. requests请求常用可选参数
import requests

url_params = {'key':'value'}#字典传递参数,如果值为None的键不会被添加到url中
data ={'playbody':'数据'}
headers = {
  'content-type': 'application/json',
   'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'
}
cookies = {'cookienamekey':'value'}
proxies = {
    "http": "http://user:[email protected]:3128/",
}
r = requests.get('your url',
params = url_params, data = data, 
headers = headers, cookies=cookies,
proxies=proxies)
print(r.url)
# your url?key=value

通过上面的完整代码示例,应该是大概了解requests传入可选参数的方法,这样子通过这个类库基本上网站的内容,都是可以访问到,但是部分网站做了反爬措施,会导致请求失败或者返回非预期内容

大家加油,我们下期再见!

Python3爬虫 | requests库_第2张图片
关注我

你可能感兴趣的:(Python3爬虫 | requests库)