python爬虫基础 --requests库基础

一、requests库的几个常用方法:

方法解释
requests.request()构造一个请求,支撑以下个方法的基础方法
requests.get()获取HTML的主要方法,对应于HTTP的GET
requests.head()获取网页头信息的方法,对应于HTTP的HEAD
requests.post()向网页提交POST请求的方法,对应于HTTP的POST
requests.put()向网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch()向网页提交局部修改请求,对应于HTTP的PATCH
requests.delete()向网页提交删除请求,对应于HTTP的DELETE

二、requests解析:

1.方法解析
r = requests.request(url,params=None,**kwargs)

url: 网页链接
params: 在url中增加的额外参数(字典、参数、字节流格式),为可选输入
**kwargs:12个控制访问的参数,也是可选的

例如,get方法其实是request方法的封装,如下:

def get(url, params, **kwargs):
	kwargs.setdefault('allow redirects', True)
	return request('get', url, params=params, **kwargs)

同理,requests库的其他几个常用方法皆是以request方法封装而成,所以,归根结底,request方法的理解是十分必要的。

2.request方法解析:
r = requests.request(method, url, **kwargs)

其中:
method: GET/PUT/POST/PATCH/delete/OPTIONS七个方法
url: 网页链接
**kwargs: 13个控制访问参数。

3.13个控制访问参数:

(1)params:字典或字节序列,作为参数增加到url中
例:

import requests
kv = {'key1':'value1', 'key2':'value2'}
r = requests.request('GET', 'http://python123.io/ws', params=kv)
print(r.url)

运行结果:

result:https://python123.io/ws?key2=value2&key1=value1

(2)data:字典或字节序列或文件对象,作为Request的内容
例:

		# -*- coding: utf-8 -*-
		import 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格式的数据,做为Requests的内容
例:

kv = {'key1':'value1', 'key2':'value2'}
			r = requests.request('POST', 'http://python123.io/ws', json=kv)

(4)headers:字典,HTTP定制头
例:

		hd = {'user-agent': 'Chrome/10'}  #模拟Chrome/10向服务器发起访问
		r = requests.request('POST', 'http://python123.io/ws', headers=hd)

(5)cookie:字典或CookieJar,Request中的cookie
(6)auth:元组,支持HTTP认证功能
(7)files:字典类型,传输文件
例:

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

(8)timeout:设定的超时时间,秒为单位
(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证书路径

4.Response对象的5个属性:

如:

r = requests.get(url)

上述代码中,
requests: Response,返回一个包含服务器资源的Response对象
get: Request,构造一个向服务器请求资源的Request对象
下面则是关于response对象属性及其解释:

Response对象属性属性解释
r.status_codingHTTP请求的返回状态,200表示连接成功,404表示连接失败(除了200,基本就已经失败了)
r.textHTTP响应内容的字符串形式,即url对应的页面内容
r.encoding从HTTP header中猜测的响应内容编码方式,通常设置‘utf-8’
r.apparent_encoding从内容中分析出的响应内容编码方式(备选编码方式)
r.contentHTTP响应内容的二进制形式

注意:如果header中不存在charset,则自动认为编码为ISO-8859-1

5.requests库的6中常见异常:
异常解析
requests.ConnectionError网络连接错误异常
requests.HTTPErrorHTTP错误异常
requests.URLRequiredURL缺失异常
requests.TooManyRedirects超过最大重定向次数,产生重定向异常
requests.ConnectTimeout连接远程服务器超时异常
requests.Timeout请求URL超时,产生超时异常
6.Response库异常的解决办法:
方法解析
r.raise_for_status()如果不是200,产生异常requests.HTTPError(自动判断异常)

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

def getHTMLText(url):
	try:
		r = requests.get(url, timeout=30)	#get方法调用
		r.raise_for_status()				#状态码检查,正确则继续,错误则停止
		r.encoding = r.apparent_encoding 	#编码方式转换,将现有编码方式转换为备用编码
		return r.text						#返回文本
	except:									#错误处理
		return 'Error!!!!'

上面定义的方法就是获取网页HTML的通用代码框架,当然,不可能每个网页的爬取都是直接复制这个getHTMLText方法来完成,我们的目的是精析它,然后灵活应用。

百度HTML页面爬取示例:
调用上述框架:

# -*- coding: utf-8 -*-
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 'Error!!!!'

if __name__ == '__main__':
	url = 'http://www.baidu.com'
	print(getHTMLText(url))

或者直接写代码:

# -*- coding: utf-8 -*-
import requests

try:
	url = 'http://www.baidu.com'       		#百度页面的url
	r = requests.get(url,timeout=30)      	# requests库的get方法,设置30秒为响应超时
	r.raise_for_status()					# 状态码判断,为200时正确,其他的错误
	r.encoding = r.apparent_encoding		# 设置网页编码方式为百度页面的备用编码方式
	print('百度页面HTML:\n' + r.text)		# 打印
except:										# 错误处理
	print('爬取失败!!')

是不是特别简单呢,hiahiahia…


新手发文,有错请指出!!!
本文是学习mooc平台视频的学习笔记,链接:https://www.icourse163.org/course/BIT-1001870001

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值