网络爬虫_Requests库入门

1、Requests库的安装


1.Requests库的安装与测试(简洁版):

1. 在管理员权限下启动command窗口
2. 输入 pip install requests 便可安装
3. 安装完成后测试

import requests
r = requests.get("http://www.baidu.com")
r.status_code #  若是状态码输出200则表示访问成功
r.encoding = 'utf-8'
r.text # 打印网页内容

2.Requests库的更多介绍:

http://www.python-requests.org

3.Requests库的7个主要方法(简单介绍):

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

2、Requests库的get()方法


1. 获取网页的代码: 

r = requests.get(url)
	构造一个向服务器请求资源的Request对象
	requests库内部生成,python大小写敏感,大写R
	返回一个包含服务器资源的Response对象 用r标识
	包含从服务器返回的全部相关资源

2.获取网页的完整代码:

requests.get(url, params=None,**kwargs)
各参数含义:
    url: 拟获取页面的URL连接
    params:URL中的额外参数,字典或字节流格式,可选
    **kwargs:12个控制访问的参数

3.Requests库的2个重要对象:

Request
Response:包含了爬虫返回的内容,1. 返回内容 2. 请求信息

4.Response对象的属性:

r.status_code 
HTTP请求的返回状态,200表示成功,404表示失败(非200即为error)
r.text
HTTP响应内容的字符串形式,即URL对应的页面内容
r.encoding
从HTTP header中猜想的响应内容编码方式
r.apparent_encoding
从内容中分析出的响应内容编码方式(备选编码方式)
r.content
HTTP响应内容的二进制形式

5.解析过程:

解析返回值的基本流程:
1. r.status_code 检查返回的response对象的状态,若是返回值是200,则继续
2. r.text r.encoding
3. r.apparent_encoding
4. r.content 

具体操做:
import requests # 导入requests库 
r = requests.get("http://www.baidu.com") # 导入百度
r.status_code # 若是状态码输出200则表示访问成功
r.text # 打印网页内容
r.encoding # 查看网页编码格式
# 若输出格式为 ‘ISO-8859-1’,则打印网页内容为乱码(非中文)
r.apparent_encoding # 查看该网页另一种编码格式
# 若输出格式为 ‘utf-8’,则打印网页内容中能够包含不少中文
r.encoding = 'utf-8'
r.text # 打印网页内容,包含不少中文信息

6.理解Response的编码:

r.encoding  
从HTTP header中猜想的响应内容编码方式
说明: 从header中的charset字段中得到编码方式,
	  若是服务器中有charset字段,说明服务器对编码有要求;
	  不然,无要求,且默认编码为 ISO-8859-1(不能够解析中文)
r.apparent_encoding
	  从内容中分析出的响应内容编码方式(备选编码方式)
	  所以,当没法用r.encoding 获取正确编码时,则使用r.apparent 获取网页正确编码

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


1. 爬取网页内容异常

咱们使用requests.get(url)获取url网页内容,
因为网络链接有风险,这种语句的异常处理很重要
注:使用通用代码框架使得爬取网页过程更有效,稳定,可靠

2.理解Requests库的异常

1. requests.ConnectionError
	网络链接错误异常,好比DNS查询失败、拒绝链接等
2. requests.HTTPError
	 HTTP错误异常
3. requests.URLRequired
	 URL缺失异常
4. requests.TooManyRedirects
	 超过最大重定向次数,产生重定向异常
5. requests.ConnectionTimeout
	 仅指链接远程服务超时
6. requests.Timeout
	 请求URL超时,产生超时异常

3.response对象提供的方法:

r.raise_for_status()
若是不是200,产生异常requests.HTTPError
功能:若是状态值返回200,则表示返回正常,不然产生HTTPError异常

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

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))
# 功能:处理爬虫过程当中出现的一系列错误或者网络不稳定的现象

4、HTTP协议及Requests库方法


1. HTTP协议

HTTP协议,Hypertext Transfer Protocol,超文本传输协议

HTTP是一个基于“请求与响应”模式的、无状态的应用层协议
      进一步解释:
      用户发起请求,服务器做出相应
      无状态:用户屡次发起请求之间并无关联
      应用层协议工做在TCP协议之上
      HTTP协议采用URL做为定位网络资源的标识。
			
URL格式  http://host[:port][path]
	host:合法的Internet主机域名或IP地址
	port:端口号,缺省端口为80
	path:请求资源的路径
			
实例:
	http://www.bit.edu.cn
	    指的是北京理工大学的官网
	http://220.181.111.188/duty
	     指的是该主机下的duty 文件夹
			
HTTP URL的理解:
URL是经过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
        

2.HTTP协议和Requests库功能一致性比较

HTTP协议    Requests库方法    功能一致性
GET		    requests.get()		一致
HEAD		requests.head()		一致
POST		requests.post()		一致
PUT		    requests.put()		一致
PATCH 		requests.patch()   	一致
DELETE		requests.delete()	一致

3.HTTP协议对资源的操做 

1.GET	    请求获取URL位置的资源
2.HEAD	    请求获取URL1位置资源的响应消息报告,即获取该资源的头部信息
3.POST	    请求向URL位置的资源后附加新的数据
4.PUT	     请求向URL位置存储一个资源,覆盖原URL位置的资源
5.PATCH	    请求局部更新URL位置的资源,即改变该处资源的部份内容
6.DELETE      请求删除URL位置存储的资源

4.理解PATCH和PUT的区别

需求:用户修改了UserName,其余不变
*采用PATCH,仅向URL提交UserName的局部更新请求。
*采用PUT,必须将全部20个字段一并提交到URL,未提交字段被删除。
若是资源很庞大,仅使用PATCH修改便可。
PATCH的最主要好处:节省网络带宽。

5.Requests库中post()方法  

方法一:(字典存储)python

# 该字典存储在form字段下,自动编码为form
import requests
payload = {'key1':'value1','key2':'value2'}
r = requests.post('http://httpbin.org/post',data = payload)
print(r.text)

输出结果:json

{
	...
  "form": {
    "key1": "value1", 
    "key2": "value2"
}, 
	...
}  

方法二:(data数据域存储)浏览器

# 向URL POST一个字符串,自动编码为data
import requests
r = requests.post('http://httpbin.org/post',data = 'ABC')
print(r.text)  

输出结果:服务器

{
 ...
  "data": "ABC", 
 ...
}  

致使差别的解析:cookie

根据用户提交数据的不一样,在服务器上自动对相应数据整理。
put()方法相似,可是产生的效果是覆盖掉。

5、Requests库主要方法解析


1. requests方法

参数介绍: 网络

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

 method:请求方式app

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:控制访问的参数,均为可选项(如下是各类访问参数)框架

**kwargs  : 控制访问的参数,均为可选项(如下是各类访问参数)
params  : 字典或字节序列,做为参数增长到url中
data    : 字典、字节序列或文件对象,做为Request的内容
json    : JSON格式的数据,做为Request的内容
headers : 字典,HTTP定制头(模拟浏览器)
cookies : 字典或CookieJar,Request中的cookie
auth    : 元组,支持HTTP认证功能
files   : 字典类型,传输文件
timeout : 设定超时时间,秒为单位
proxies : 字典类型,设定访问代理服务器,能够增长登陆认证
allow_redirects : True/False,默认为True,重定向开关
stream  : True/False,默认为True,获取内容当即下载开关
verify  : True/False,默认为True,认证SSL证书开关
cert    : 本地SSL证书路径

参数的使用实例:params的使用:字典或字节序列,做为参数增长到url中post

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

输出:将kv字段的内容附加到url中测试

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

2. get方法[最经常使用的方法] 

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

3. head方法 

requests.head(url, **kwargs)
 url	 : 拟获取页面的url连接
 **kwargs: 13个控制访问的参数

4. post方法 

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

5. put方法 

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

6. patch方法 

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

7. delete方法 

requests.delete(url, **kwargs)
  url     : 拟删除页面的url连接
  **kwargs: 13个控制访问的参数

RRR

相关文章
相关标签/搜索